<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rust/src/libstd/task/spawn.rs, branch auto</title>
<subtitle>https://github.com/rust-lang/rust
</subtitle>
<id>http://git.dreamy.place/mirrors/rust/atom?h=auto</id>
<link rel='self' href='http://git.dreamy.place/mirrors/rust/atom?h=auto'/>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/'/>
<updated>2013-12-25T03:59:52+00:00</updated>
<entry>
<title>green: Rip the bandaid off, introduce libgreen</title>
<updated>2013-12-25T03:59:52+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2013-12-13T02:01:59+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=51abdee5f1ad932671350fdd8a7911fe144d08b8'/>
<id>urn:sha1:51abdee5f1ad932671350fdd8a7911fe144d08b8</id>
<content type='text'>
This extracts everything related to green scheduling from libstd and introduces
a new libgreen crate. This mostly involves deleting most of std::rt and moving
it to libgreen.

Along with the movement of code, this commit rearchitects many functions in the
scheduler in order to adapt to the fact that Local::take now *only* works on a
Task, not a scheduler. This mostly just involved threading the current green
task through in a few locations, but there were one or two spots where things
got hairy.

There are a few repercussions of this commit:

* tube/rc have been removed (the runtime implementation of rc)
* There is no longer a "single threaded" spawning mode for tasks. This is now
  encompassed by 1:1 scheduling + communication. Convenience methods have been
  introduced that are specific to libgreen to assist in the spawning of pools of
  schedulers.
</content>
</entry>
<entry>
<title>Test fallout from std::comm rewrite</title>
<updated>2013-12-17T06:55:49+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2013-12-16T02:17:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=39a6c9d6376f96cc8b905f00b88d20e42961206c'/>
<id>urn:sha1:39a6c9d6376f96cc8b905f00b88d20e42961206c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fallout of rewriting std::comm</title>
<updated>2013-12-17T01:47:11+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2013-12-06T02:19:06+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=529e268ab900f1b6e731af64ce2aeecda3555f4e'/>
<id>urn:sha1:529e268ab900f1b6e731af64ce2aeecda3555f4e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>libextra: Another round of de-`Cell`-ing.</title>
<updated>2013-12-10T23:13:12+00:00</updated>
<author>
<name>Patrick Walton</name>
<email>pcwalton@mimiga.net</email>
</author>
<published>2013-12-04T00:44:16+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=786dea207d5b891d37e596e96dd2f84c4cb59f49'/>
<id>urn:sha1:786dea207d5b891d37e596e96dd2f84c4cb59f49</id>
<content type='text'>
34 uses of `Cell` remain.
</content>
</entry>
<entry>
<title>Implement a lock-free work-stealing deque</title>
<updated>2013-11-29T20:19:16+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2013-11-26T17:40:24+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=a70f9d7324a91058d31c1301c4351932880d57e8'/>
<id>urn:sha1:a70f9d7324a91058d31c1301c4351932880d57e8</id>
<content type='text'>
This adds an implementation of the Chase-Lev work-stealing deque to libstd
under std::rt::deque. I've been unable to break the implementation of the deque
itself, and it's not super highly optimized just yet (everything uses a SeqCst
memory ordering).

The major snag in implementing the chase-lev deque is that the buffers used to
store data internally cannot get deallocated back to the OS. In the meantime, a
shared buffer pool (synchronized by a normal mutex) is used to
deallocate/allocate buffers from. This is done in hope of not overcommitting too
much memory. It is in theory possible to eventually free the buffers, but one
must be very careful in doing so.

I was unable to get some good numbers from src/test/bench tests (I don't think
many of them are slamming the work queue that much), but I was able to get some
good numbers from one of my own tests. In a recent rewrite of select::select(),
I found that my implementation was incredibly slow due to contention on the
shared work queue. Upon switching to the parallel deque, I saw the contention
drop to 0 and the runtime go from 1.6s to 0.9s with the most amount of time
spent in libuv awakening the schedulers (plus allocations).

Closes #4877
</content>
</entry>
<entry>
<title>Improve the rt::thread module</title>
<updated>2013-11-27T17:53:48+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2013-11-26T02:08:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=5d6dbf3f262fabcb6cb920dd08be6f9d8df75d5c'/>
<id>urn:sha1:5d6dbf3f262fabcb6cb920dd08be6f9d8df75d5c</id>
<content type='text'>
* Added doc comments explaining what all public functionality does.
* Added the ability to spawn a detached thread
* Added the ability for the procs to return a value in 'join'
</content>
</entry>
<entry>
<title>librustc: Make `||` lambdas not infer to `proc`s</title>
<updated>2013-11-26T16:25:27+00:00</updated>
<author>
<name>Patrick Walton</name>
<email>pcwalton@mimiga.net</email>
</author>
<published>2013-11-22T07:36:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=749ee53c6d23ae1467568d6e0280a4f59e4e952b'/>
<id>urn:sha1:749ee53c6d23ae1467568d6e0280a4f59e4e952b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove linked failure from the runtime</title>
<updated>2013-11-25T05:21:12+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2013-11-22T00:55:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=acca9e3834842ee8d8104abe9b8b9bb88861793c'/>
<id>urn:sha1:acca9e3834842ee8d8104abe9b8b9bb88861793c</id>
<content type='text'>
The reasons for doing this are:

* The model on which linked failure is based is inherently complex
* The implementation is also very complex, and there are few remaining who
  fully understand the implementation
* There are existing race conditions in the core context switching function of
  the scheduler, and possibly others.
* It's unclear whether this model of linked failure maps well to a 1:1 threading
  model

Linked failure is often a desired aspect of tasks, but we would like to take a
much more conservative approach in re-implementing linked failure if at all.

Closes #8674
Closes #8318
Closes #8863
</content>
</entry>
<entry>
<title>libstd: Change all uses of `&amp;fn(A)-&gt;B` over to `|A|-&gt;B` in libstd</title>
<updated>2013-11-19T20:40:19+00:00</updated>
<author>
<name>Patrick Walton</name>
<email>pcwalton@mimiga.net</email>
</author>
<published>2013-11-19T05:15:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=1946265e1a1a32eb922846f314657a4aa7eb1d23'/>
<id>urn:sha1:1946265e1a1a32eb922846f314657a4aa7eb1d23</id>
<content type='text'>
</content>
</entry>
<entry>
<title>libstd: Change all `~fn()`s to `proc`s in the standard library.</title>
<updated>2013-11-19T02:27:30+00:00</updated>
<author>
<name>Patrick Walton</name>
<email>pcwalton@mimiga.net</email>
</author>
<published>2013-11-18T21:25:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=500a8f15c9afdd4e98e1d1573e34dd2b948f9773'/>
<id>urn:sha1:500a8f15c9afdd4e98e1d1573e34dd2b948f9773</id>
<content type='text'>
This makes `Cell`s no longer necessary in most cases.
</content>
</entry>
</feed>
