<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; tq02h2a01</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/tq02h2a01/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>对多进程/单线程模型的理解</title>
		<link>http://software.intel.com/zh-cn/blogs/2009/11/10/400002669/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2009/11/10/400002669/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 01:37:53 +0000</pubDate>
		<dc:creator>tq02h2a01</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[多线程]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2009/11/10/400002669/</guid>
		<description><![CDATA[  最近在看北电代码的时候，发现，系统中大部分模块都采用的是一个进程/一个线程的设计方式，一个大的功能模块由多个进程构成。因为系统是运行在Linux平台上，一开始，我觉得这种设计是有问题，追溯根源，以为是北电之前使用的操作系统是vxworks,那帮北美的开发人员把vxworks中task的概念生搬硬套到linux中，在linux中提供了比进程性能更高的线程，他们并没有充分的利用起来。之后认真思考了一下，发现，他们这样设计是有道理的。分析如下，我们先来说说进程和线程的区别吧。 区别: 1. 进程是资源拥有的基本单位，线程是调度的基本单位，在CPU上调度的是线程，当任务切换的时候，需要将资源进行保存。 2. 在一个进程内部可以运行多个线程，线程切换不需要资源保存，这些线程共享进程的资源，地址空间。进程切换需要资源保存。 3. 进程之间的同步是可以通过各种IPC，各种进程锁，信号量，信号来实现，比如文件锁，自旋锁，RCU等。而线程之间的同步可以通过进程内部锁来实现，比如互斥锁，读写锁等。 在设计中为什么要使用多进程单线程的这种模式呢？我的理解如下: 1. 增加整个系统的健壮性，比如一个进程做两件事情，任何一件事情做失败都会导致另外一件事情不能做。如果将这个进程里的功能解耦，系统的健壮性自然也随之增强。单点故障的几率减小。 2. 从开发角度讲，这种解耦也便于系统升级，对其中的某一个模块升级变得更加容易而不会影响到其他功能模块。 3. 虽然性能不如多线程，但是多线程编程适用于高级程序员，对编程技巧要求高。使用多进程其实性能差别就在于进程切换资源保存部分，多线程模型会把进程间数据传递的开销转到锁开销上。 4. 减小整个会话阻塞在单个进程中，使得整个系统的吞吐量增大。 以上理解，是我对多进程/单线程模型的一点心得。]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>最近在看北电代码的时候，发现，系统中大部分模块都采用的是一个进程/一个线程的设计方式，一个大的功能模块由多个进程构成。因为系统是运行在Linux平台上，一开始，我觉得这种设计是有问题，追溯根源，以为是北电之前使用的操作系统是vxworks,那帮北美的开发人员把vxworks中task的概念生搬硬套到linux中，在linux中提供了比进程性能更高的线程，他们并没有充分的利用起来。之后认真思考了一下，发现，他们这样设计是有道理的。分析如下，我们先来说说进程和线程的区别吧。</p>
<p>区别:</p>
<p>1. 进程是资源拥有的基本单位，线程是调度的基本单位，在CPU上调度的是线程，当任务切换的时候，需要将资源进行保存。</p>
<p>2. 在一个进程内部可以运行多个线程，线程切换不需要资源保存，这些线程共享进程的资源，地址空间。进程切换需要资源保存。</p>
<p>3. 进程之间的同步是可以通过各种IPC，各种进程锁，信号量，信号来实现，比如文件锁，自旋锁，RCU等。而线程之间的同步可以通过进程内部锁来实现，比如互斥锁，读写锁等。</p>
<p>在设计中为什么要使用多进程单线程的这种模式呢？我的理解如下:</p>
<p>1. 增加整个系统的健壮性，比如一个进程做两件事情，任何一件事情做失败都会导致另外一件事情不能做。如果将这个进程里的功能解耦，系统的健壮性自然也随之增强。单点故障的几率减小。</p>
<p>2. 从开发角度讲，这种解耦也便于系统升级，对其中的某一个模块升级变得更加容易而不会影响到其他功能模块。</p>
<p>3. 虽然性能不如多线程，但是多线程编程适用于高级程序员，对编程技巧要求高。使用多进程其实性能差别就在于进程切换资源保存部分，多线程模型会把进程间数据传递的开销转到锁开销上。</p>
<p>4. 减小整个会话阻塞在单个进程中，使得整个系统的吞吐量增大。</p>
<p>以上理解，是我对多进程/单线程模型的一点心得。<br />
<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2009/11/10/400002669/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

