multithreading - 多线程究竟是如何工作的?

标签 multithreading concurrency scalability

我想知道多线程究竟是如何解决可伸缩性问题的。我的基本理解是当请求进入时分配一个新线程来服务该请求。但幕后究竟发生了什么。

我目前正在启动一个项目,我必须构建一个存储云来处理 1000 次 GET、PUT、DELETE 操作。多线程会解决可伸缩性问题还是我应该研究事件服务器?

最佳答案

多线程允许同时运行多个线程。在多核机器上,这意味着两个线程可以真正地并行运行,做的工作是他们一次运行一个线程的两倍。理想情况下,在具有 4 个线程的 4 核机器上,您完成的工作量几乎是使用单线程时的 4 倍。

为此,您需要一个可以通过独立运行的多个线程来解决的问题。您需要相当聪明才能弄清楚如何将程序分解为线程。而且,大多数时候,您需要真正聪明地防止这些线程破坏彼此的数据(或者,更糟糕的是,巧妙地破坏它)。尽管有时可以几乎独立地运行线程,例如同一程序的不同 session ,但如果您能做到这一点,那就太好了。

多线程的规模在于让所有核心都工作。在 4 核机器上,您可以完成 4 倍的工作——希望如此。如果您升级到 16 核机器,您将获得另外 4 倍的增长——如果您进行了一些非常聪明的编程。如果您吹嘘自己比竞争对手快 50%,那么您最好先于竞争对手使用多线程。

否则,请使用单线程解决方案。这要简单得多。 (对我来说,数以千计的数据量并不多。如果它可以达到数百万,多线程可能是值得的。)

关于multithreading - 多线程究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10951124/

相关文章:

go - HTTP 处理程序中参与者模式的好处

java - 适用于大型应用程序的 Spring Roo

c++ - 为什么这个构造函数在传递给 std::thread 时被调用 3 次?

python - 执行没有多处理池映射的进程列表

java - 如何找出谁在java中创建了一个线程?

Java 堆栈 - ORM 与数据库可伸缩性

asp.net - 普通与云/Azure 托管以及 SQL Azure 与 SQL Server 的角色

python multiprocessing - 将子进程日志记录发送到在父进程中运行的 GUI

golang通过FTP上传并同时获取FTP进度

Java - 线程变量保留以前的值