心如止水--coofucoo的专栏

We are all fighters, fighting for life and love.

用户操作
[即时聊天] [发私信] [加为好友]
coofucoo zhangID:coofucoo
560862次访问,排名73好友1人,关注者9
coofucoo的文章
原创 287 篇
翻译 17 篇
转载 248 篇
评论 760 篇
coofucoo zhang的公告
本站说明:
本站为coofucoo的个人blog,
主要用来发表coofucoo个人的文章,
以及收藏经典文章之用。

If you love something very very much... Let it go free!!! If it does not come back... It means it does not belong to you... If it does, Please love it forever!

我得联系方式:
email:39zqy@sina.com
qq:121951686
加我QQ者请说明来历,否则被拒绝别怪我啊。

最近评论
bill_mark:程序员现在完全变成几个的大的软件公司的试验品。一个技术没有成熟又推出一个新的技术,程序员们完全疲于奔命,就像狗熊掰棒子,掰一个丢一个,不断的在学新的技术,安全没有积累,别说10年前的技术没有用,即便是5年前的技术现在又有多少在使用?这样的情形可能还得延续50年。更新换代的速度才会慢下来。我们这些搞技术的除几个出类拔萃的顶尖高手外全部会成为技术更新的试验品。高软件开发没有前途。
bill_mark:微软下一代的操作系统向WPF编程方式过渡,也就是脚本定义,到那时浏览器也就进入历史,因为,windows整个系统的桌面就可以完成浏览网页。浏览器与系统完全整合,操作系统免费提供给用户,用户的使用软件进入授权时代,就像你现在打电话按每分钟计费一样安使用功能计费。微软进入资源垄断时代,并无孔不入。中国的软件业到时候就变成美国人的附庸。没完没了的给美国人交钱,就像你现在购买房子,那么你一辈子就没完……
xing007008:正想找这资料
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
rqwz:开始研究这个了。。难道是最近养得不错,准备节食、减肥了?
文章分类
收藏
相册
Fun
LEYOU工作室
Live
NBA
WOW
Yourzine
个人收藏
工作show
南京之行
我的济南,我的学校
我在天津
英业达06之旅
LEYOU工作室作品
山东建筑工程学院管理工程系网站
本人收藏
CityLife的流水账
fatalerror99 (iTePub's Nirvana) 的专栏(RSS)
leeseon的blog
Mirricle blog
勤奇殊话
宋姐的blog
阳阳的blog(RSS)
翻译计划
个人关注
20年:海尔教科书
ajaxpatterns
artima.com
C/C++ Reference
earthwebnews.com
Joel on Software
oops
slashdot.org
theserverside.com
wiki
世界经理人网站
哈佛商业评论
搜狐理财
梦想风暴
环球企业家
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 [原创]线程收藏

新一篇: [原创]ajax + cgi ?! | 旧一篇: [原创]身体是革命的本钱

btw:这是我工作中的一个总结,感觉写的挺好,贴出来让大家有机会学习一下。哈哈。当然,程序采用化名,而且不会泄露公司机密。:P

线程

一、What Is a Thread?

      虽然不清楚线程底层实现的真正原理,但是那个也许不是特别重要。重要的是,线程与进程有什么区别?

       当我们用fork创建一个新的进程时,实际上我们创建的是一个新的应用程序。他有自己的变量以及PID。这个进程是独立运行的,与创建他的进程几乎毫无关系。

       与之不同的是,当我们创建一个线程时,他虽然有自己的stack,但是却共享全局变量(global variables)、文件描述符(file descriptors)、信号句柄(signal handlers)以及与父进程共享当前的目录状态信息。

       如果不管实现原理的话,对于我们来说,搞清楚线程与进程的区别,有助于我们更好的使用他们。由线程的特点我们可以看到,线程的优势就在于,他既利用了系统的并发特性,又在并发的线程间极大的共享了一些信息。而这个特点,就决定了线程有它所更适合应用的场合。

二、Advantages and Drawbacks of Threads

线程的优点:

1、创建线程的代价远远小于进程。操作系统在线程间切换的成本,以及每个线程所需要消耗的资源,都小于进程。所以,在同样的需求情况下,采用线程可能会更有效率。

2、有时候我们需要一个应用程序,既能够在同一时刻执行两种不同的操作,有需要在其间共享大量的数据资源。在这种情况下,就需要线程。现代数据库为了提高吞吐量,都是采用了多线程机制。但是由于数据库内部数据交互量大,采用线程也是必然趋势。

3、充分利用系统资源。有些应用的操作可能频繁被打断,频繁需要输入或者输出。我们就可以利用线程的特点,在内部共享数据,既可以及时相应输入输出请求,又可以利用空闲的时间进行计算操作。

线程的缺点:

1、编写多线程程序本身就非常复杂,危险。当你涉及同步、异步、竞争、互斥,多单元操作一块共享资源时,就特别要注意,因为即使你很小心,你还是会犯错误。

2、多线程的程序很难调适,因为它们之间的交互是很难控制,并且变化莫测的。

 

三、_REENTRANT

书中说应用多线程编程,应该定义_REENTRANT,可是这个东西从哪里定义呢?后来知道怎么定义了,原来是在编译命令里,不过在现在的系统里,定义不定义好像一个样子老了?我?书?

四、多线程/进程通讯

       不管是同步、互斥、异步,还是其它的什么操作,关键是大家要共享一块资源。同时对这个资源进行操作,于是就有了通讯。细想我们目前所用过的不管是线程还是进程,就是分三个部分。

首先可以通过程序实现。比如在多线程编程中,我们可以通过共享的变量来进行通讯。其次,我们可以利用操作系统所提供的一些方法,比如多线程的mutexSemaphores,多进程中的IPCsignal等。这些由操作系统提供的方法,由操作系统实现了很多功能,帮我们屏蔽了很多细节。不过,用这些东西或许会让我们丧失可移植性?最后,当然我们还可以应用很多很变态的方法,比如文件、网络。这些应用虽然有他们的缺点,但是也有他们的优势。比如文件就比较适合大数据量的场合。而网络呢,则适合分布式程序。试想一下,如果把整个英特网看成一个大的整体,那么每个节点实际上都是一个单独运行的进程,那么网络不就是进程间的通讯吗?

不过在共享操作的同时,有一点是比较麻烦的。就是尽管在我们看来仅仅是一行代码。但实际上运行起来,可能是很多连续得操作。这样就带来一个互斥问题,如果多个实体同时竞争一个资源,自然会打破这些原子操作,于是带来危险。我们需要有些方法能够保证这些原子操作的连续,这些可能对应用程序本身很难,但是操作系统可以帮助我们完成。其实在更高层的应用领域中,也有类似概念。企业开发领域的事务处理概念也很类似。当一个事务中的一个操作被打断后,事务处理的回滚操作会保证该操作的原子性,如此一来,一项事务要么执行,要们就不执行,从而避免了很多问题。

    还有一个问题就是轮训和阻塞。尽管在通讯时,我们可以采用很多方法,但并不是说这些方法的效率都一样。由于一些计算机硬体的特色,所以有时候如果充分利用系统提供的功能,就会得出效率比较高的程序。比如,如果我们在编写程序时,充分利用操作系统的阻塞功能,我们的应用程序就会提高很多的性能,因为我们不需要不停的用一些宝贵的时间片来进行无谓的判断。可是有时候我们就不需进行一些必要的判断,关键还是看我们的需求。

五、Mutex的属性

当采用Mutex进行线程互斥时,默认初始化的Mutex的属性是fast。这种情况下,当该线程请求一个已经被Lock的锁时,本身会被阻塞。而另一个掌握lock的线程如果也同时被阻塞的话,就会陷入死锁状态。可以通过设置Mutex的属性来改变这种状况,但是需要查看pthread_mutex_initmanual page

六、小强的代码

小强本次的代码令我颇为失望J ,它所给我带来的惊喜远远小于上两次。不过小强还是在自己程序的字里行间反映出一些本质的特性。比如他对标志量的处理就与我或者大多数人的想法有些出入。联想上次我和大强的业务逻辑一样,但是我们写出的代码却风格迥异。如果说,那是因为大强与我经验差距甚远的话,那么我和小强的思维为何又差距如此大呢?是本身性格的不同?还是我UI的代码写得太多了?^_^

发表于 @ 2005年11月23日 21:07:00|评论(loading...)|编辑

新一篇: [原创]ajax + cgi ?! | 旧一篇: [原创]身体是革命的本钱

评论

#herry0628 发表于2008-07-14 17:39:10  IP: 220.178.42.*
USFINE.COM sell World of Warcraft gold and
wow powerleveling sevise.
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © coofucoo zhang