您的位置:首页 > 产品设计 > UI/UE

对【线程】,【协程】 的一点理解, luikimfai(lkf) blog

2017-08-24 11:11 183 查看
最近接触【协程】,搞清楚概念, 查了一些资料:

1. 【协程】是什么:

  a. 可以理解成【轻权线程】, 即【用户态线程】, 依赖用户或程序库调度, 开销比内核调度的【内核线程】小。

  b. linux 2.6之后的版本, 调用系统调用创建的线程都是内核级线程。

2. 【协程】对比【线程】有什么好处:

  a. 高并发, 例如连接服务器, 如果使用one thread per connection 模型可能会因频繁的上下问切换导致性能下降。

  b. 线成的创建开销大(8m栈大小), 32位 3G 用户空间的系统 也就创建 300多个线程。 如果创建携程可以轻松建上万个。(印证开销小)

  c. 同步编程, 示例可以看go 语言的 tls 握手代码。 完全同步写成。 如果用异步写将非常困难,且难读。(降低编程难度, 增加可读性)

3. 【协程】对比【线程】坏处:

  a. 依赖用户或程序库调度。 某些情况可能不如依赖系统调度的线程高效。

  b. 系统不知道用户层有多少协程, cpu时间分配可能较少。

3. 【协程】什么场景适用:

  在我看来:

  a. 单机高并发(io密集型)(连接服务器)

  b. 复杂状态机编程(例如tcp握手,tls握手)

  这两种场景。

4. 【协程】什么场景【不适用】:

  a. cpu密集型(几个线程就跑满cpu)。 状态不复杂的程序。 (one thread per loop + 固定线程池)模型更加适用。

参考资料:

1. 在线学堂 操作系统 清华大学, 进程与线程部分。

2. 网络编程实践 63. 非阻塞IO之外的选择

3. Linux多线程服务端编程 使用muduo C++网络库 P80

4. https://zhihu.com/question/35128513/answer/148038406
对【线程】,【协程】 的一点理解, luikimfai(lkf) blog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: