Codebase list libmce-perl / upstream/1.865
New upstream version 1.865 gregor herrmann 4 years ago
38 changed file(s) with 209 addition(s) and 197 deletion(s). Raw diff Collapse all Expand all
00
11 Revision history for Perl module MCE.
22
3 1.865 Wed Dec 25 18:00:00 EST 2019
4
5 * Bug fix for two-way IPC stalling on Windows in MCE::Channel::Threads.
6 See https://www.perlmonks.org/?node_id=11110612
7
8 * Remove the check for MSWin32 in MCE::Channel::Mutex. MCE::Channel since
9 the 1st release silently defaults to MCE::Channel::Threads on Windows.
10
11 * Small tweak to MCE::Signal.
12
313 1.864 Wed Dec 04 13:00:00 EST 2019
414
5 * Bug fix to MCE::Signal - Shared manager not exiting, introduced in 1.863.
15 * Bug fix in MCE::Signal - Shared manager not exiting, introduced in 1.863.
616
717 * Use monotonic clock if available in MCE->yield and MCE::Child->yield.
18 See https://www.perlmonks.org/?node_id=11109673
819
920 1.863 Sun Nov 26 20:00:00 EST 2019
1021
6464 "provides" : {
6565 "MCE" : {
6666 "file" : "lib/MCE.pm",
67 "version" : "1.864"
67 "version" : "1.865"
6868 },
6969 "MCE::Candy" : {
7070 "file" : "lib/MCE/Candy.pm",
71 "version" : "1.864"
71 "version" : "1.865"
7272 },
7373 "MCE::Channel" : {
7474 "file" : "lib/MCE/Channel.pm",
75 "version" : "1.864"
75 "version" : "1.865"
7676 },
7777 "MCE::Channel::Mutex" : {
7878 "file" : "lib/MCE/Channel/Mutex.pm",
79 "version" : "1.864"
79 "version" : "1.865"
8080 },
8181 "MCE::Channel::Simple" : {
8282 "file" : "lib/MCE/Channel/Simple.pm",
83 "version" : "1.864"
83 "version" : "1.865"
8484 },
8585 "MCE::Channel::Threads" : {
8686 "file" : "lib/MCE/Channel/Threads.pm",
87 "version" : "1.864"
87 "version" : "1.865"
8888 },
8989 "MCE::Child" : {
9090 "file" : "lib/MCE/Child.pm",
91 "version" : "1.864"
91 "version" : "1.865"
9292 },
9393 "MCE::Core::Input::Generator" : {
9494 "file" : "lib/MCE/Core/Input/Generator.pm",
95 "version" : "1.864"
95 "version" : "1.865"
9696 },
9797 "MCE::Core::Input::Handle" : {
9898 "file" : "lib/MCE/Core/Input/Handle.pm",
99 "version" : "1.864"
99 "version" : "1.865"
100100 },
101101 "MCE::Core::Input::Iterator" : {
102102 "file" : "lib/MCE/Core/Input/Iterator.pm",
103 "version" : "1.864"
103 "version" : "1.865"
104104 },
105105 "MCE::Core::Input::Request" : {
106106 "file" : "lib/MCE/Core/Input/Request.pm",
107 "version" : "1.864"
107 "version" : "1.865"
108108 },
109109 "MCE::Core::Input::Sequence" : {
110110 "file" : "lib/MCE/Core/Input/Sequence.pm",
111 "version" : "1.864"
111 "version" : "1.865"
112112 },
113113 "MCE::Core::Manager" : {
114114 "file" : "lib/MCE/Core/Manager.pm",
115 "version" : "1.864"
115 "version" : "1.865"
116116 },
117117 "MCE::Core::Validation" : {
118118 "file" : "lib/MCE/Core/Validation.pm",
119 "version" : "1.864"
119 "version" : "1.865"
120120 },
121121 "MCE::Core::Worker" : {
122122 "file" : "lib/MCE/Core/Worker.pm",
123 "version" : "1.864"
123 "version" : "1.865"
124124 },
125125 "MCE::Flow" : {
126126 "file" : "lib/MCE/Flow.pm",
127 "version" : "1.864"
127 "version" : "1.865"
128128 },
129129 "MCE::Grep" : {
130130 "file" : "lib/MCE/Grep.pm",
131 "version" : "1.864"
131 "version" : "1.865"
132132 },
133133 "MCE::Loop" : {
134134 "file" : "lib/MCE/Loop.pm",
135 "version" : "1.864"
135 "version" : "1.865"
136136 },
137137 "MCE::Map" : {
138138 "file" : "lib/MCE/Map.pm",
139 "version" : "1.864"
139 "version" : "1.865"
140140 },
141141 "MCE::Mutex" : {
142142 "file" : "lib/MCE/Mutex.pm",
143 "version" : "1.864"
143 "version" : "1.865"
144144 },
145145 "MCE::Mutex::Channel" : {
146146 "file" : "lib/MCE/Mutex/Channel.pm",
147 "version" : "1.864"
147 "version" : "1.865"
148148 },
149149 "MCE::Mutex::Channel2" : {
150150 "file" : "lib/MCE/Mutex/Channel2.pm",
151 "version" : "1.864"
151 "version" : "1.865"
152152 },
153153 "MCE::Mutex::Flock" : {
154154 "file" : "lib/MCE/Mutex/Flock.pm",
155 "version" : "1.864"
155 "version" : "1.865"
156156 },
157157 "MCE::Queue" : {
158158 "file" : "lib/MCE/Queue.pm",
159 "version" : "1.864"
159 "version" : "1.865"
160160 },
161161 "MCE::Relay" : {
162162 "file" : "lib/MCE/Relay.pm",
163 "version" : "1.864"
163 "version" : "1.865"
164164 },
165165 "MCE::Signal" : {
166166 "file" : "lib/MCE/Signal.pm",
167 "version" : "1.864"
167 "version" : "1.865"
168168 },
169169 "MCE::Step" : {
170170 "file" : "lib/MCE/Step.pm",
171 "version" : "1.864"
171 "version" : "1.865"
172172 },
173173 "MCE::Stream" : {
174174 "file" : "lib/MCE/Stream.pm",
175 "version" : "1.864"
175 "version" : "1.865"
176176 },
177177 "MCE::Subs" : {
178178 "file" : "lib/MCE/Subs.pm",
179 "version" : "1.864"
179 "version" : "1.865"
180180 },
181181 "MCE::Util" : {
182182 "file" : "lib/MCE/Util.pm",
183 "version" : "1.864"
183 "version" : "1.865"
184184 }
185185 },
186186 "release_status" : "stable",
196196 "url" : "https://github.com/marioroy/mce-perl.git"
197197 }
198198 },
199 "version" : "1.864"
199 "version" : "1.865"
200200 }
2424 provides:
2525 MCE:
2626 file: lib/MCE.pm
27 version: '1.864'
27 version: '1.865'
2828 MCE::Candy:
2929 file: lib/MCE/Candy.pm
30 version: '1.864'
30 version: '1.865'
3131 MCE::Channel:
3232 file: lib/MCE/Channel.pm
33 version: '1.864'
33 version: '1.865'
3434 MCE::Channel::Mutex:
3535 file: lib/MCE/Channel/Mutex.pm
36 version: '1.864'
36 version: '1.865'
3737 MCE::Channel::Simple:
3838 file: lib/MCE/Channel/Simple.pm
39 version: '1.864'
39 version: '1.865'
4040 MCE::Channel::Threads:
4141 file: lib/MCE/Channel/Threads.pm
42 version: '1.864'
42 version: '1.865'
4343 MCE::Child:
4444 file: lib/MCE/Child.pm
45 version: '1.864'
45 version: '1.865'
4646 MCE::Core::Input::Generator:
4747 file: lib/MCE/Core/Input/Generator.pm
48 version: '1.864'
48 version: '1.865'
4949 MCE::Core::Input::Handle:
5050 file: lib/MCE/Core/Input/Handle.pm
51 version: '1.864'
51 version: '1.865'
5252 MCE::Core::Input::Iterator:
5353 file: lib/MCE/Core/Input/Iterator.pm
54 version: '1.864'
54 version: '1.865'
5555 MCE::Core::Input::Request:
5656 file: lib/MCE/Core/Input/Request.pm
57 version: '1.864'
57 version: '1.865'
5858 MCE::Core::Input::Sequence:
5959 file: lib/MCE/Core/Input/Sequence.pm
60 version: '1.864'
60 version: '1.865'
6161 MCE::Core::Manager:
6262 file: lib/MCE/Core/Manager.pm
63 version: '1.864'
63 version: '1.865'
6464 MCE::Core::Validation:
6565 file: lib/MCE/Core/Validation.pm
66 version: '1.864'
66 version: '1.865'
6767 MCE::Core::Worker:
6868 file: lib/MCE/Core/Worker.pm
69 version: '1.864'
69 version: '1.865'
7070 MCE::Flow:
7171 file: lib/MCE/Flow.pm
72 version: '1.864'
72 version: '1.865'
7373 MCE::Grep:
7474 file: lib/MCE/Grep.pm
75 version: '1.864'
75 version: '1.865'
7676 MCE::Loop:
7777 file: lib/MCE/Loop.pm
78 version: '1.864'
78 version: '1.865'
7979 MCE::Map:
8080 file: lib/MCE/Map.pm
81 version: '1.864'
81 version: '1.865'
8282 MCE::Mutex:
8383 file: lib/MCE/Mutex.pm
84 version: '1.864'
84 version: '1.865'
8585 MCE::Mutex::Channel:
8686 file: lib/MCE/Mutex/Channel.pm
87 version: '1.864'
87 version: '1.865'
8888 MCE::Mutex::Channel2:
8989 file: lib/MCE/Mutex/Channel2.pm
90 version: '1.864'
90 version: '1.865'
9191 MCE::Mutex::Flock:
9292 file: lib/MCE/Mutex/Flock.pm
93 version: '1.864'
93 version: '1.865'
9494 MCE::Queue:
9595 file: lib/MCE/Queue.pm
96 version: '1.864'
96 version: '1.865'
9797 MCE::Relay:
9898 file: lib/MCE/Relay.pm
99 version: '1.864'
99 version: '1.865'
100100 MCE::Signal:
101101 file: lib/MCE/Signal.pm
102 version: '1.864'
102 version: '1.865'
103103 MCE::Step:
104104 file: lib/MCE/Step.pm
105 version: '1.864'
105 version: '1.865'
106106 MCE::Stream:
107107 file: lib/MCE/Stream.pm
108 version: '1.864'
108 version: '1.865'
109109 MCE::Subs:
110110 file: lib/MCE/Subs.pm
111 version: '1.864'
111 version: '1.865'
112112 MCE::Util:
113113 file: lib/MCE/Util.pm
114 version: '1.864'
114 version: '1.865'
115115 recommends:
116116 Sereal::Decoder: '3.015'
117117 Sereal::Encoder: '3.015'
138138 homepage: https://github.com/marioroy/mce-perl
139139 license: http://dev.perl.org/licenses/
140140 repository: https://github.com/marioroy/mce-perl.git
141 version: '1.864'
141 version: '1.865'
1616 ABSTRACT => 'Many-Core Engine for Perl providing parallel processing capabilities',
1717 AUTHOR => 'Mario E. Roy <marioeroy AT gmail DOT com>',
1818 NAME => 'MCE',
19 VERSION => '1.864',
19 VERSION => '1.865',
2020
2121 EXE_FILES => [ @exe_files ],
2222
6767 'provides' => {
6868 'MCE' => {
6969 'file' => 'lib/MCE.pm',
70 'version' => '1.864'
70 'version' => '1.865'
7171 },
7272 'MCE::Candy' => {
7373 'file' => 'lib/MCE/Candy.pm',
74 'version' => '1.864'
74 'version' => '1.865'
7575 },
7676 'MCE::Channel' => {
7777 'file' => 'lib/MCE/Channel.pm',
78 'version' => '1.864'
78 'version' => '1.865'
7979 },
8080 'MCE::Channel::Mutex' => {
8181 'file' => 'lib/MCE/Channel/Mutex.pm',
82 'version' => '1.864'
82 'version' => '1.865'
8383 },
8484 'MCE::Channel::Simple' => {
8585 'file' => 'lib/MCE/Channel/Simple.pm',
86 'version' => '1.864'
86 'version' => '1.865'
8787 },
8888 'MCE::Channel::Threads' => {
8989 'file' => 'lib/MCE/Channel/Threads.pm',
90 'version' => '1.864'
90 'version' => '1.865'
9191 },
9292 'MCE::Child' => {
9393 'file' => 'lib/MCE/Child.pm',
94 'version' => '1.864'
94 'version' => '1.865'
9595 },
9696 'MCE::Core::Input::Generator' => {
9797 'file' => 'lib/MCE/Core/Input/Generator.pm',
98 'version' => '1.864'
98 'version' => '1.865'
9999 },
100100 'MCE::Core::Input::Handle' => {
101101 'file' => 'lib/MCE/Core/Input/Handle.pm',
102 'version' => '1.864'
102 'version' => '1.865'
103103 },
104104 'MCE::Core::Input::Iterator' => {
105105 'file' => 'lib/MCE/Core/Input/Iterator.pm',
106 'version' => '1.864'
106 'version' => '1.865'
107107 },
108108 'MCE::Core::Input::Request' => {
109109 'file' => 'lib/MCE/Core/Input/Request.pm',
110 'version' => '1.864'
110 'version' => '1.865'
111111 },
112112 'MCE::Core::Input::Sequence' => {
113113 'file' => 'lib/MCE/Core/Input/Sequence.pm',
114 'version' => '1.864'
114 'version' => '1.865'
115115 },
116116 'MCE::Core::Manager' => {
117117 'file' => 'lib/MCE/Core/Manager.pm',
118 'version' => '1.864'
118 'version' => '1.865'
119119 },
120120 'MCE::Core::Validation' => {
121121 'file' => 'lib/MCE/Core/Validation.pm',
122 'version' => '1.864'
122 'version' => '1.865'
123123 },
124124 'MCE::Core::Worker' => {
125125 'file' => 'lib/MCE/Core/Worker.pm',
126 'version' => '1.864'
126 'version' => '1.865'
127127 },
128128 'MCE::Flow' => {
129129 'file' => 'lib/MCE/Flow.pm',
130 'version' => '1.864'
130 'version' => '1.865'
131131 },
132132 'MCE::Grep' => {
133133 'file' => 'lib/MCE/Grep.pm',
134 'version' => '1.864'
134 'version' => '1.865'
135135 },
136136 'MCE::Loop' => {
137137 'file' => 'lib/MCE/Loop.pm',
138 'version' => '1.864'
138 'version' => '1.865'
139139 },
140140 'MCE::Map' => {
141141 'file' => 'lib/MCE/Map.pm',
142 'version' => '1.864'
142 'version' => '1.865'
143143 },
144144 'MCE::Mutex' => {
145145 'file' => 'lib/MCE/Mutex.pm',
146 'version' => '1.864'
146 'version' => '1.865'
147147 },
148148 'MCE::Mutex::Channel' => {
149149 'file' => 'lib/MCE/Mutex/Channel.pm',
150 'version' => '1.864'
150 'version' => '1.865'
151151 },
152152 'MCE::Mutex::Channel2' => {
153153 'file' => 'lib/MCE/Mutex/Channel2.pm',
154 'version' => '1.864'
154 'version' => '1.865'
155155 },
156156 'MCE::Mutex::Flock' => {
157157 'file' => 'lib/MCE/Mutex/Flock.pm',
158 'version' => '1.864'
158 'version' => '1.865'
159159 },
160160 'MCE::Queue' => {
161161 'file' => 'lib/MCE/Queue.pm',
162 'version' => '1.864'
162 'version' => '1.865'
163163 },
164164 'MCE::Relay' => {
165165 'file' => 'lib/MCE/Relay.pm',
166 'version' => '1.864'
166 'version' => '1.865'
167167 },
168168 'MCE::Signal' => {
169169 'file' => 'lib/MCE/Signal.pm',
170 'version' => '1.864'
170 'version' => '1.865'
171171 },
172172 'MCE::Step' => {
173173 'file' => 'lib/MCE/Step.pm',
174 'version' => '1.864'
174 'version' => '1.865'
175175 },
176176 'MCE::Stream' => {
177177 'file' => 'lib/MCE/Stream.pm',
178 'version' => '1.864'
178 'version' => '1.865'
179179 },
180180 'MCE::Subs' => {
181181 'file' => 'lib/MCE/Subs.pm',
182 'version' => '1.864'
182 'version' => '1.865'
183183 },
184184 'MCE::Util' => {
185185 'file' => 'lib/MCE/Util.pm',
186 'version' => '1.864'
186 'version' => '1.865'
187187 }
188188 },
189189 'prereqs' => {
00 ## Many-Core Engine for Perl
11
2 This document describes MCE version 1.864.
2 This document describes MCE version 1.865.
33
44 Many-Core Engine (MCE) for Perl helps enable a new level of performance by
55 maximizing all available cores.
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 our @CARP_NOT = qw( MCE );
1616
239239
240240 =head1 VERSION
241241
242 This document describes MCE::Candy version 1.864
242 This document describes MCE::Candy version 1.865
243243
244244 =head1 DESCRIPTION
245245
1010
1111 no warnings qw( uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 use base 'MCE::Channel';
1616 use MCE::Mutex ();
1717 use bytes;
1818
1919 my $LF = "\012"; Internals::SvREADONLY($LF, 1);
20 my $is_MSWin32 = ( $^O eq 'MSWin32' ) ? 1 : 0;
2120 my $freeze = MCE::Channel::_get_freeze();
2221 my $thaw = MCE::Channel::_get_thaw();
2322
5251 return if $self->{ended};
5352
5453 local $\ = undef if (defined $\);
55 MCE::Util::_sock_ready_w( $self->{p_sock} ) if $is_MSWin32;
5654 print { $self->{p_sock} } pack('i', -1);
5755
5856 $self->{ended} = 1;
6563 local $\ = undef if (defined $\);
6664 my $p_mutex = $self->{p_mutex};
6765 $p_mutex->lock2 if $p_mutex;
68
69 MCE::Util::_sock_ready_w( $self->{p_sock} ) if $is_MSWin32;
7066
7167 while ( @_ ) {
7268 my $data;
8985
9086 if ( $count == 1 ) {
9187 ( my $c_mutex = $self->{c_mutex} )->lock;
92 MCE::Util::_sock_ready( $self->{c_sock} ) if $is_MSWin32;
9388 MCE::Util::_sysread( $self->{c_sock}, my($plen), 4 );
9489
9590 my $len = unpack('i', $plen);
109104 my ( $plen, @ret );
110105
111106 ( my $c_mutex = $self->{c_mutex} )->lock;
112 MCE::Util::_sock_ready( $self->{c_sock} ) if $is_MSWin32;
113107
114108 while ( $count-- ) {
115109 MCE::Util::_sysread( $self->{c_sock}, $plen, 4 );
178172 my $p_mutex = $self->{p_mutex};
179173 $p_mutex->lock2 if $p_mutex;
180174
181 MCE::Util::_sock_ready_w( $self->{p_sock} ) if $is_MSWin32;
182175 print { $self->{p_sock} } pack('i', length $data), $data;
183176 $p_mutex->unlock2 if $p_mutex;
184177
189182 my ( $self ) = @_;
190183
191184 ( my $c_mutex = $self->{c_mutex} )->lock;
192 MCE::Util::_sock_ready( $self->{c_sock} ) if $is_MSWin32;
193185 MCE::Util::_sysread( $self->{c_sock}, my($plen), 4 );
194186
195187 my $len = unpack('i', $plen);
252244 local $MCE::Signal::IPC = 1;
253245 ( my $c_mutex = $self->{c_mutex} )->lock2;
254246
255 MCE::Util::_sock_ready_w( $self->{c_sock} ) if $is_MSWin32;
256247 print { $self->{c_sock} } pack('i', length $data), $data;
257248 $c_mutex->unlock2;
258249 }
270261 my $p_mutex = $self->{p_mutex};
271262 $p_mutex->lock if $p_mutex;
272263
273 MCE::Util::_sock_ready( $self->{p_sock} ) if $is_MSWin32;
274
275 ( $p_mutex || $is_MSWin32 )
264 ( $p_mutex )
276265 ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 )
277266 : read( $self->{p_sock}, $plen, 4 );
278267
279268 my $len = unpack('i', $plen);
280269
281 ( $p_mutex || $is_MSWin32 )
270 ( $p_mutex )
282271 ? MCE::Channel::_read( $self->{p_sock}, $data, $len )
283272 : read( $self->{p_sock}, $data, $len );
284273
299288
300289 MCE::Util::_nonblocking( $self->{p_sock}, 1 );
301290
302 ( $p_mutex || $is_MSWin32 )
291 ( $p_mutex )
303292 ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 )
304293 : read( $self->{p_sock}, $plen, 4 );
305294
311300 return wantarray ? () : undef;
312301 }
313302
314 ( $p_mutex || $is_MSWin32 )
303 ( $p_mutex )
315304 ? MCE::Channel::_read( $self->{p_sock}, $data, $len )
316305 : read( $self->{p_sock}, $data, $len );
317306
338327
339328 =head1 VERSION
340329
341 This document describes MCE::Channel::Mutex version 1.864
330 This document describes MCE::Channel::Mutex version 1.865
342331
343332 =head1 DESCRIPTION
344333
1010
1111 no warnings qw( uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 use base 'MCE::Channel';
1616 use bytes;
327327
328328 =head1 VERSION
329329
330 This document describes MCE::Channel::Simple version 1.864
330 This document describes MCE::Channel::Simple version 1.865
331331
332332 =head1 DESCRIPTION
333333
1010
1111 no warnings qw( uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 use threads;
1616 use threads::shared;
2828
2929 $obj{init_pid} = MCE::Channel::_pid();
3030 MCE::Util::_sock_pair( \%obj, 'p_sock', 'c_sock' );
31 MCE::Util::_sock_pair( \%obj, 'p2_sock', 'c2_sock' ) if $is_MSWin32;
3132
3233 # locking for the consumer side of the channel
3334 $obj{cr_mutex} = threads::shared::share( my $cr_mutex );
254255 local $MCE::Signal::SIG;
255256
256257 {
258 my $c_sock = $self->{c2_sock} || $self->{c_sock};
259
257260 local $MCE::Signal::IPC = 1;
258261 CORE::lock $self->{cw_mutex};
259262
260 MCE::Util::_sock_ready_w( $self->{c_sock} ) if $is_MSWin32;
261 print { $self->{c_sock} } pack('i', length $data), $data;
263 MCE::Util::_sock_ready_w( $c_sock ) if $is_MSWin32;
264 print { $c_sock } pack('i', length $data), $data;
262265 }
263266
264267 CORE::kill($MCE::Signal::SIG, $$) if $MCE::Signal::SIG;
273276 local $/ = $LF if ( $/ ne $LF );
274277
275278 {
279 my $p_sock = $self->{p2_sock} || $self->{p_sock};
276280 my $pr_mutex = $self->{pr_mutex};
281
277282 CORE::lock $pr_mutex if $pr_mutex;
278 MCE::Util::_sock_ready( $self->{p_sock} ) if $is_MSWin32;
283 MCE::Util::_sock_ready( $p_sock ) if $is_MSWin32;
279284
280285 ( $pr_mutex || $is_MSWin32 )
281 ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 )
282 : read( $self->{p_sock}, $plen, 4 );
286 ? MCE::Util::_sysread( $p_sock, $plen, 4 )
287 : read( $p_sock, $plen, 4 );
283288
284289 my $len = unpack('i', $plen);
285290
286291 ( $pr_mutex || $is_MSWin32 )
287 ? MCE::Channel::_read( $self->{p_sock}, $data, $len )
288 : read( $self->{p_sock}, $data, $len );
292 ? MCE::Channel::_read( $p_sock, $data, $len )
293 : read( $p_sock, $data, $len );
289294 }
290295
291296 chop( $data )
300305 local $/ = $LF if ( $/ ne $LF );
301306
302307 {
308 my $p_sock = $self->{p2_sock} || $self->{p_sock};
303309 my $pr_mutex = $self->{pr_mutex};
310
304311 CORE::lock $pr_mutex if $pr_mutex;
305 MCE::Util::_nonblocking( $self->{p_sock}, 1 );
312 MCE::Util::_nonblocking( $p_sock, 1 );
306313
307314 ( $pr_mutex || $is_MSWin32 )
308 ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 )
309 : read( $self->{p_sock}, $plen, 4 );
310
311 MCE::Util::_nonblocking( $self->{p_sock}, 0 );
315 ? MCE::Util::_sysread( $p_sock, $plen, 4 )
316 : read( $p_sock, $plen, 4 );
317
318 MCE::Util::_nonblocking( $p_sock, 0 );
312319
313320 my $len; $len = unpack('i', $plen) if $plen;
314321
315322 return wantarray ? () : undef unless $len;
316323
317324 ( $pr_mutex || $is_MSWin32 )
318 ? MCE::Channel::_read( $self->{p_sock}, $data, $len )
319 : read( $self->{p_sock}, $data, $len );
325 ? MCE::Channel::_read( $p_sock, $data, $len )
326 : read( $p_sock, $data, $len );
320327 }
321328
322329 chop( $data )
340347
341348 =head1 VERSION
342349
343 This document describes MCE::Channel::Threads version 1.864
350 This document describes MCE::Channel::Threads version 1.865
344351
345352 =head1 DESCRIPTION
346353
1010
1111 no warnings qw( uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (TestingAndDebugging::ProhibitNoStrict)
7575 my ( $pid, $self ) = ( $tid ? $$ .'.'. $tid : $$, @_ );
7676
7777 if ( $self->{'init_pid'} && $self->{'init_pid'} eq $pid ) {
78 MCE::Util::_destroy_socks( $self, qw(c_sock p_sock) );
78 MCE::Util::_destroy_socks($self, qw(c_sock c2_sock p_sock p2_sock));
7979 delete($self->{c_mutex}), delete($self->{p_mutex});
8080 }
8181
127127
128128 =head1 VERSION
129129
130 This document describes MCE::Channel version 1.864
130 This document describes MCE::Channel version 1.865
131131
132132 =head1 SYNOPSIS
133133
211211
212212 =head2 new ( impl => STRING, mp => BOOLEAN )
213213
214 This creates a new channel. Three implementations are provided C<Mutex> (default),
215 C<Threads>, and C<Simple> indicating the locking mechanism to use C<MCE::Mutex>,
216 C<threads::shared>, and no locking respectively.
214 This creates a new channel. Three implementations are provided C<Mutex>,
215 C<Threads>, and C<Simple> indicating the locking mechanism to use
216 C<MCE::Mutex>, C<threads::shared>, and no locking respectively.
217217
218218 $chnl = MCE::Channel->new(); # default: impl => 'Mutex', mp => 0
219
220 The C<Mutex> channel implementation supports processes and threads whereas the
221 C<Threads> channel implementation is suited for threads only.
219 # default: impl => 'Threads' on Windows
220
221 The C<Mutex> implementation supports processes and threads whereas the
222 C<Threads> implementation is suited for Windows and threads only.
222223
223224 $chnl = MCE::Channel->new( impl => 'Mutex' ); # MCE::Mutex locking
224225 $chnl = MCE::Channel->new( impl => 'Threads' ); # threads::shared locking
226
227 # on Windows, silently becomes impl => 'Threads' when specifying 'Mutex'
225228
226229 Set the C<mp> (m)any (p)roducers option to a true value if there will be two
227230 or more workers calling C<enqueue>, <send>, C<recv2>, or C<recv2_nb> on the
229232
230233 $chnl = MCE::Channel->new( impl => 'Mutex', mp => 1 );
231234 $chnl = MCE::Channel->new( impl => 'Threads', mp => 1 );
235
236 # on Windows, silently becomes impl => 'Threads' when specifying 'Mutex'
232237
233238 The C<Simple> implementation is optimized for one producer and one consumer max.
234239 It omits locking for maximum performance. This implementation is preferred for
1010
1111 package MCE::Child;
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitExplicitReturnUndef)
971971
972972 =head1 VERSION
973973
974 This document describes MCE::Child version 1.864
974 This document describes MCE::Child version 1.865
975975
976976 =head1 SYNOPSIS
977977
15641564 A demonstration is provided in the next section for fetching URLs in parallel.
15651565
15661566 The default C<floating_seconds> is 0.008 and 0.015 on UNIX and Windows,
1567 respectively. Pass 0 if you want to give other workers a chance to run.
1567 respectively. Pass 0 if simply wanting to give other workers a chance to run.
15681568
15691569 # total run time: 1.00 second
15701570
1414 use strict;
1515 use warnings;
1616
17 our $VERSION = '1.864';
17 our $VERSION = '1.865';
1818
1919 ## Items below are folded into MCE.
2020
219219
220220 =head1 VERSION
221221
222 This document describes MCE::Core::Input::Generator version 1.864
222 This document describes MCE::Core::Input::Generator version 1.865
223223
224224 =head1 DESCRIPTION
225225
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 ## Items below are folded into MCE.
1919
281281
282282 =head1 VERSION
283283
284 This document describes MCE::Core::Input::Handle version 1.864
284 This document describes MCE::Core::Input::Handle version 1.865
285285
286286 =head1 DESCRIPTION
287287
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 ## Items below are folded into MCE.
1919
136136
137137 =head1 VERSION
138138
139 This document describes MCE::Core::Input::Iterator version 1.864
139 This document describes MCE::Core::Input::Iterator version 1.865
140140
141141 =head1 DESCRIPTION
142142
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 ## Items below are folded into MCE.
1919
205205
206206 =head1 VERSION
207207
208 This document describes MCE::Core::Input::Request version 1.864
208 This document describes MCE::Core::Input::Request version 1.865
209209
210210 =head1 DESCRIPTION
211211
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 ## Items below are folded into MCE.
1919
230230
231231 =head1 VERSION
232232
233 This document describes MCE::Core::Input::Sequence version 1.864
233 This document describes MCE::Core::Input::Sequence version 1.865
234234
235235 =head1 DESCRIPTION
236236
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1919 ## no critic (TestingAndDebugging::ProhibitNoStrict)
10401040
10411041 =head1 VERSION
10421042
1043 This document describes MCE::Core::Manager version 1.864
1043 This document describes MCE::Core::Manager version 1.865
10441044
10451045 =head1 DESCRIPTION
10461046
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 ## Items below are folded into MCE.
1919
390390
391391 =head1 VERSION
392392
393 This document describes MCE::Core::Validation version 1.864
393 This document describes MCE::Core::Validation version 1.865
394394
395395 =head1 DESCRIPTION
396396
1313 use strict;
1414 use warnings;
1515
16 our $VERSION = '1.864';
16 our $VERSION = '1.865';
1717
1818 my $_tid = $INC{'threads.pm'} ? threads->tid() : 0;
1919
743743
744744 =head1 VERSION
745745
746 This document describes MCE::Core::Worker version 1.864
746 This document describes MCE::Core::Worker version 1.865
747747
748748 =head1 DESCRIPTION
749749
44
55 =head1 VERSION
66
7 This document describes MCE::Core version 1.864
7 This document describes MCE::Core version 1.865
88
99 =head1 SYNOPSIS
1010
44
55 =head1 VERSION
66
7 This document describes MCE::Examples version 1.864
7 This document describes MCE::Examples version 1.865
88
99 =head1 INCLUDED WITH THE DISTRIBUTION
1010
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
478478
479479 =head1 VERSION
480480
481 This document describes MCE::Flow version 1.864
481 This document describes MCE::Flow version 1.865
482482
483483 =head1 DESCRIPTION
484484
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
433433
434434 =head1 VERSION
435435
436 This document describes MCE::Grep version 1.864
436 This document describes MCE::Grep version 1.865
437437
438438 =head1 SYNOPSIS
439439
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
348348
349349 =head1 VERSION
350350
351 This document describes MCE::Loop version 1.864
351 This document describes MCE::Loop version 1.865
352352
353353 =head1 DESCRIPTION
354354
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
433433
434434 =head1 VERSION
435435
436 This document describes MCE::Map version 1.864
436 This document describes MCE::Map version 1.865
437437
438438 =head1 SYNOPSIS
439439
1010
1111 no warnings qw( threads recursion uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 use base 'MCE::Mutex';
1616 use Scalar::Util qw(refaddr weaken);
138138
139139 =head1 VERSION
140140
141 This document describes MCE::Mutex::Channel version 1.864
141 This document describes MCE::Mutex::Channel version 1.865
142142
143143 =head1 DESCRIPTION
144144
1010
1111 no warnings qw( threads recursion uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 use base 'MCE::Mutex::Channel';
1616 use MCE::Util ();
113113
114114 =head1 VERSION
115115
116 This document describes MCE::Mutex::Channel2 version 1.864
116 This document describes MCE::Mutex::Channel2 version 1.865
117117
118118 =head1 DESCRIPTION
119119
1010
1111 no warnings qw( threads recursion uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 use base 'MCE::Mutex';
1616 use Fcntl ':flock';
180180
181181 =head1 VERSION
182182
183 This document describes MCE::Mutex::Flock version 1.864
183 This document describes MCE::Mutex::Flock version 1.865
184184
185185 =head1 DESCRIPTION
186186
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (TestingAndDebugging::ProhibitNoStrict)
7575
7676 =head1 VERSION
7777
78 This document describes MCE::Mutex version 1.864
78 This document describes MCE::Mutex version 1.865
7979
8080 =head1 SYNOPSIS
8181
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (Subroutines::ProhibitExplicitReturnUndef)
1616 ## no critic (TestingAndDebugging::ProhibitNoStrict)
16001600
16011601 =head1 VERSION
16021602
1603 This document describes MCE::Queue version 1.864
1603 This document describes MCE::Queue version 1.865
16041604
16051605 =head1 SYNOPSIS
16061606
1010
1111 no warnings qw( threads recursion uninitialized numeric );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
1616
369369
370370 =head1 VERSION
371371
372 This document describes MCE::Relay version 1.864
372 This document describes MCE::Relay version 1.865
373373
374374 =head1 SYNOPSIS
375375
1010
1111 no warnings qw( threads recursion uninitialized once );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616
205205 $SIG{__DIE__} = $SIG{__WARN__} = sub {};
206206
207207 if (exists $_sig_name_lkup{$_sig_name}) {
208 $_exit_status = $MCE::Signal::KILLED = $_is_sig = 1;
209 $_exit_status = 255, $_sig_name = 'TERM' if ($_sig_name eq '__DIE__');
210 $_exit_status = 0 if ($_sig_name eq 'PIPE');
208211 $SIG{INT} = $SIG{$_sig_name} = sub {};
209 $_exit_status = $MCE::Signal::KILLED = $_is_sig = 1;
210 $_exit_status = 255 if ($_sig_name eq '__DIE__');
211 $_exit_status = 0 if ($_sig_name eq 'PIPE');
212212 }
213213 else {
214214 $_exit_status = $_sig_name if ($_sig_name =~ /^\d+$/);
437437
438438 =head1 VERSION
439439
440 This document describes MCE::Signal version 1.864
440 This document describes MCE::Signal version 1.865
441441
442442 =head1 SYNOPSIS
443443
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
714714
715715 =head1 VERSION
716716
717 This document describes MCE::Step version 1.864
717 This document describes MCE::Step version 1.865
718718
719719 =head1 DESCRIPTION
720720
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
670670
671671 =head1 VERSION
672672
673 This document describes MCE::Stream version 1.864
673 This document describes MCE::Stream version 1.865
674674
675675 =head1 SYNOPSIS
676676
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
1616 ## no critic (TestingAndDebugging::ProhibitNoStrict)
203203
204204 =head1 VERSION
205205
206 This document describes MCE::Subs version 1.864
206 This document describes MCE::Subs version 1.865
207207
208208 =head1 SYNOPSIS
209209
1010
1111 no warnings qw( threads recursion uninitialized numeric );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616
409409
410410 =head1 VERSION
411411
412 This document describes MCE::Util version 1.864
412 This document describes MCE::Util version 1.865
413413
414414 =head1 SYNOPSIS
415415
1010
1111 no warnings qw( threads recursion uninitialized );
1212
13 our $VERSION = '1.864';
13 our $VERSION = '1.865';
1414
1515 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1616 ## no critic (Subroutines::ProhibitSubroutinePrototypes)
44
55 =head1 VERSION
66
7 This document describes MCE version 1.864
7 This document describes MCE version 1.865
88
99 Many-Core Engine (MCE) for Perl helps enable a new level of performance by
1010 maximizing all available cores.