如何使用单个线程实现多线程

本文关键字:实现 多线程 线程 单个 何使用 | 更新日期: 2023-09-27 18:28:00

在最近的一次"技术讨论"中,有人问我"如何使用单线程实现多线程?"在确认面试官不认为这是一个技巧问题后,我不得不承认我不知道如何在单线程上实现多线程,而且我认为这个问题有点矛盾。面试官提供的答案是"使用多播委托",这让我怀疑他是否真的不了解委托和底层线程。我很想知道这个问题是否有任何优点,更重要的是,相关的答案是否有意义。非常感谢。

如何使用单个线程实现多线程

协同程序是用来模拟协同多线程的(.NET不支持,除非我们认为async/await模式是协同程序模式)。

异步编程模拟多线程(至少部分…例如,同时执行多个读/写)。。。两者都是隐藏"线程"部分的可能解决方案。

详细介绍异步编程。。。可以构建一个完整的web服务器,能够同时响应数百个请求,基于单个线程+异步细化。每次从磁盘读取都将异步完成。对连接客户端的每个响应都将异步完成,依此类推

根据我的理解,node.js是一个完全基于异步编程(技术上称为非阻塞I/O)的单线程web服务器。。。请参见示例https://stackoverflow.com/a/14797359/613130

在我所写的内容中,我将补充说,有一些语言实现了所谓的"绿色线程"。绿色线程是不使用操作系统调度程序的协作线程。因此,他们的代码是在单个线程中执行的(至少从他们的角度来看)。Go、haskell、旧Ruby、各种版本的Smalltalk似乎都使用了/使用了绿色线程)。