<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[对多进程/单线程模型的理解]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 12 Nov 2009 05:33:10 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	最近在看北电代码的时候，发现，系统中大部分模块都采用的是一个进程/一个线程的设计方式，一个大的功能模块由多个进程构成。因为系统是运行在Linux平台上，一开始，我觉得这种设计是有问题，追溯根源，以为是北电之前使用的操作系统是vxworks,那帮北美的开发人员把vxworks中task的概念生搬硬套到linux中，在linux中提供了比进程性能更高的线程，他们并没有充分的利用起来。之后认真思考了一下，发现，他们这样设计是有道理的。分析如下，我们先来说说进程和线程的区别吧。<br/><br/>区别:<br/><br/>1. 进程是资源拥有的基本单位，线程是调度的基本单位，在CPU上调度的是线程，当任务切换的时候，需要将资源进行保存。<br/><br/>2. 在一个进程内部可以运行多个线程，线程切换不需要资源保存，这些线程共享进程的资源，地址空间。进程切换需要资源保存。<br/><br/>3. 进程之间的同步是可以通过各种IPC，各种进程锁，信号量，信号来实现，比如文件锁，自旋锁，RCU等。而线程之间的同步可以通过进程内部锁来实现，比如互斥锁，读写锁等。<br/><br/>在设计中为什么要使用多进程单线程的这种模式呢？我的理解如下:<br/><br/>1. 增加整个系统的健壮性，比如一个进程做两件事情，任何一件事情做失败都会导致另外一件事情不能做。如果将这个进程里的功能解耦，系统的健壮性自然也随之增强。单点故障的几率减小。<br/><br/>2. 从开发角度讲，这种解耦也便于系统升级，对其中的某一个模块升级变得更加容易而不会影响到其他功能模块。<br/><br/>3. 虽然性能不如多线程，但是多线程编程适用于高级程序员，对编程技巧要求高。使用多进程其实性能差别就在于进程切换资源保存部分，多线程模型会把进程间数据传递的开销转到锁开销上。<br/><br/>4. 减小整个会话阻塞在单个进程中，使得整个系统的吞吐量增大。<br/><br/>以上理解，是我对多进程/单线程模型的一点心得。<br/><br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 对多进程/单线程模型的理解]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>