协程与微线程——概念篇

本文探讨了多线程开发中常见的问题,如线程安全、同步异步操作和性能挑战,并引入了协程和微线程的概念作为替代方案。协程通过迭代器模式实现,允许子过程间协作完成任务;微线程则是轻量级的逻辑线程,减少线程切换开销,结合协程实现高效并发。文章以C#代码示例说明了协程的使用,并预告了后续会提供具体的实现源码和示例程序。
摘要由CSDN通过智能技术生成

  多线程是我们日常开发中或多或少都会遇到的,它涉及了很多概念:线程安全/竞争条件、锁/死锁检测、同步/异步、阻塞/非阻塞、信号量/事件、线程池、生产消费模型等等。面对这些纷繁复杂的东西你是不是有点头大(如果你现在没有以后也会有的),你难道不想找寻一种可以让自己轻松点的方法?反正我是一直在思索尝试,直到最近了解了Erlang、Stackless Python并开始研究协程、微线程以后,我才有种豁然开朗的感觉。

  你可能要问了,“协程、微线程”这名词听起来挺酷的但是它们比起传统的多线程开发好在那里呢?这个问题我确实很难回答出来,也许只有经历过的人能感同身受。不过我倒是可以说说传统开发方式的一些弊端,让你自己来做个判断。

1. 线程安全/临界条件:这是一个很让人讨厌的东西一不小心就会出错而且还很难查找。也许你忘了在操作一个静态(全局)的List或Hashtab时加锁,亦或是你在一个异步回调函数中再次调用了当前线程的方法造成了死锁。如果这些问题在产品上线以后不规律出现那你可以惨了。

2.同步/异步:在同步且阻塞的时候你要自己开线程或者使用线程池,而异步的时候要使用回调函数或者异步委托(.net的Delegate)来处理。而无论同步、异步其实都是借助其他线程来处理,等处理完了就需要你来做一些线程同步的事情。比如通知主线程或对结果处理后再次做异步处理等。这时你就要借助semaphore/event(不是.net中的事件)、join等来帮你完成,这实在是劳心费力的事情。

3.性能:其实这个问题才是最困难的,因为线程这个东西是内核对象开多了再好的机器也负载不了,开少了无法满足需求。所以这时候你就要去学习一些并发模型来解决这个问题。比如做tcp服务端程序你不可能使用一个线程单独去处理一个socket请求,而可能的方法是用一个线程来监控一组s

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值