<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:series="http://unfoldingneurons.com/"
		>
<channel>
	<title>Comments on: Simple Co-Operative Scheduling</title>
	<atom:link href="http://petevidler.com/2011/03/simple-co-operative-scheduling/feed/" rel="self" type="application/rss+xml" />
	<link>http://petevidler.com/2011/03/simple-co-operative-scheduling/</link>
	<description>Software development and technology in general</description>
	<lastBuildDate>Fri, 11 Nov 2011 03:25:56 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
	<item>
		<title>By: Andrew</title>
		<link>http://petevidler.com/2011/03/simple-co-operative-scheduling/comment-page-1/#comment-36</link>
		<dc:creator>Andrew</dc:creator>
		<pubDate>Fri, 11 Nov 2011 03:25:56 +0000</pubDate>
		<guid isPermaLink="false">http://petevidler.com/?p=238#comment-36</guid>
		<description>&lt;p&gt;Wow! Great article and very clear.  It took no time to implement a simple scheduler into my term project after reading this.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Wow! Great article and very clear.  It took no time to implement a simple scheduler into my term project after reading this.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Pete</title>
		<link>http://petevidler.com/2011/03/simple-co-operative-scheduling/comment-page-1/#comment-35</link>
		<dc:creator>Pete</dc:creator>
		<pubDate>Tue, 27 Sep 2011 07:20:19 +0000</pubDate>
		<guid isPermaLink="false">http://petevidler.com/?p=238#comment-35</guid>
		<description>&lt;p&gt;If you look at the &lt;a href=&quot;http://en.wikipedia.org/wiki/Round-robin_scheduling&quot; rel=&quot;nofollow&quot;&gt;Wikipedia article on round robin&lt;/a&gt;, you&#039;ll see three characteristics:&lt;/p&gt;

&lt;p&gt;1) Tasks run in equal time-slices.&lt;br /&gt;
2) Tasks run in circular order.&lt;br /&gt;
3) Tasks do not have priority.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Of these, the co-operative scheduler discussed here only shares the second.  The code above has an implicit priority for tasks, in that they execute in the order that they were created.  The first point represents the largest difference, however.&lt;/p&gt;

&lt;p&gt;Giving the tasks equal time-slices means pre-empting them when their time is up -- this is the exact &lt;em&gt;opposite&lt;/em&gt; of co-operative scheduling.  Compared to the typical round-robin scheduled RTOS, the co-operative scheduler has the following advantages:&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;Easier to write&lt;/strong&gt; -- the code above is almost the complete scheduler!&lt;br /&gt;
2) &lt;strong&gt;Easier to use&lt;/strong&gt; -- no pre-emption means no mutexes or locking when accessing shared resources.&lt;br /&gt;
3) &lt;strong&gt;Greater predictability&lt;/strong&gt; -- with TTC, we always know which tasks will run at given times.  With pre-emptive round-robin, you never know how far through a task you got when it was pre-empted.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Note that there are situations where a co-operative scheduler does not make sense, such as when you have tasks that take a long time to execute in the same system as tasks that are very frequent.  I&#039;ll be looking at these situations in future articles, should I find the time to write them.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>If you look at the <a href="http://en.wikipedia.org/wiki/Round-robin_scheduling" rel="nofollow">Wikipedia article on round robin</a>, you’ll see three characteristics:</p>

<p>1) Tasks run in equal time-slices.<br />
2) Tasks run in circular order.<br />
3) Tasks do not have priority.<br /></p>

<p>Of these, the co-operative scheduler discussed here only shares the second.  The code above has an implicit priority for tasks, in that they execute in the order that they were created.  The first point represents the largest difference, however.</p>

<p>Giving the tasks equal time-slices means pre-empting them when their time is up — this is the exact <em>opposite</em> of co-operative scheduling.  Compared to the typical round-robin scheduled RTOS, the co-operative scheduler has the following advantages:</p>

<p>1) <strong>Easier to write</strong> — the code above is almost the complete scheduler!<br />
2) <strong>Easier to use</strong> — no pre-emption means no mutexes or locking when accessing shared resources.<br />
3) <strong>Greater predictability</strong> — with TTC, we always know which tasks will run at given times.  With pre-emptive round-robin, you never know how far through a task you got when it was pre-empted.<br /></p>

<p>Note that there are situations where a co-operative scheduler does not make sense, such as when you have tasks that take a long time to execute in the same system as tasks that are very frequent.  I’ll be looking at these situations in future articles, should I find the time to write them.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: rogwilsmith</title>
		<link>http://petevidler.com/2011/03/simple-co-operative-scheduling/comment-page-1/#comment-34</link>
		<dc:creator>rogwilsmith</dc:creator>
		<pubDate>Mon, 26 Sep 2011 05:37:10 +0000</pubDate>
		<guid isPermaLink="false">http://petevidler.com/?p=238#comment-34</guid>
		<description>&lt;p&gt;IS cooperative scheduling and round robin scheduling are same.
ur article was very good. but i found a little difficult to understand&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>IS cooperative scheduling and round robin scheduling are same.
ur article was very good. but i found a little difficult to understand</p>]]></content:encoded>
	</item>
</channel>
</rss>

