内卷老员工之单线程并发三

162 阅读2分钟

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

单线程并发

前文已经对于单线程并发和多线程并发进行了简单的介绍,同时提出了单线程并发相对于多线程并发的优点。本文将继续对单线程并发相关知识进行探讨。

单线程并发挑战

单线程并发存在优势的同时也存在一些挑战,下面会对存在的挑战进行一些探讨。在不是去简单性的前提下解决这些挑战,则是单线程并发设计的关键。

需要实施

需要手动进行对于任务的切换,如何设计及实现任务的手动切换是一个挑战。可以创建可以跨应用程序重用的单线程任务切换设计,最大限度地减少实现开销。

必须在后台程序中避免或处理阻塞操作

如果任务需要阻塞io的操作,则需要任务和线程保持阻塞等待状态,直到io操作处理完成。线程在等待阻塞io时不能处理其他任务。对于类似的操作,可能需要在后台保持执行,也就是相当于另一种多线程的实现方式。

单个线程只能单个cpu

单线程并发只能利用单个cpu。当操作系统为多核cpu时,使用单线程并发则会造成资源的浪费,不能充分发挥系统的性能优势。在这种情况下,多线程并发或同线程并发则是对资源更好利用的方式。

单线程并发设计

一般情况下主要有线程循环与事件循环两种切换方式组成。

  • 事件循环主要是通过由线程调用事件循环,在各种事件发生时,调用已经预置好的事件代码,对出现的事件进行处理,应用程序无法直接使用事件循环。
  • 线程循环主要通过执行线程循环的线程首先调用应用程序,然后应用程序调用 IO 工具包来检查新的入站连接、任何已打开连接上的新传入数据或计时器事件。在线程循环设计中,应用程序可以将检测到的事件之间的任何可用时间用于其所需的任何目的。

未完待续

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。