问题标签 [multithreading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
10053 浏览

c# - System.Threading.Timer 的可扩展性如何?

我正在编写一个需要使用Timers 的应用程序,但可能很多。课程的可扩展性如何System.Threading.Timer?文档只是说它是“轻量级的”,但没有进一步解释。这些计时器是否被吸入代表 a 处理所有回调的单个线程(或非常小的线程池)中Timer,还是每个Timer都有自己的线程?

我想另一种表述问题的方式是:如何System.Threading.Timer实施?

0 投票
5 回答
95097 浏览

c# - WSACancelBlockingCall 异常

好的,我的代码抛出了一个奇怪的异常,这一直困扰着我多年。

MSDN 对此并没有太大帮助:http: //msdn.microsoft.com/en-us/library/ms741547 (VS.85).aspx我什至不知道如何开始解决这个问题。它每天只抛出 4 或 5 次,而且从不在我们的测试环境中。仅在生产地点和所有生产地点。

我发现很多帖子都在询问这个异常,但没有关于导致它的原因以及如何处理或防止它的实际明确答案。

代码在单独的后台线程中运行,方法开始:

然后我运行一个循环,将所有新连接作为作业放在单独的线程池中。由于应用程序架构,它变得更加复杂,但基本上:

从那里开始,pool它拥有自己的线程,分别处理自己线程中的每个作业。

我的理解是 AcceptTcpClient() 是一个阻塞调用,并且 winsock 以某种方式告诉线程停止阻塞并继续执行..但是为什么呢?我该怎么办?只是捕获异常并忽略它?


好吧,我确实认为其他一些线程正在关闭套接字,但它肯定不是来自我的代码。我想知道的是:此套接字是由连接客户端(在套接字的另一侧)关闭还是由我的服务器关闭。因为此时此刻,每当发生此异常时,它都会关闭我的侦听端口,从而有效地关闭我的服务。如果这是从远程位置完成的,那么这是一个主要问题。

或者,这是否只是 IIS 服务器关闭了我的应用程序,从而取消了我所有的后台线程和阻塞方法?

0 投票
4 回答
3310 浏览

multithreading - 如何最小化 tcp 服务器应用程序中使用的线程数?

我正在寻找人们在实现为客户端 TCP(或 UDP)请求提供服务的服务器应用程序时使用的任何策略:设计模式、实现技术、最佳实践等。

出于这个问题的目的,我们假设请求的生命周期相对较长(几分钟),并且流量对时间敏感,因此响应消息时不能接受任何延迟。此外,我们既要为来自客户端的请求提供服务,又要与其他服务器建立自己的连接。

我的平台是 .NET,但由于无论平台如何,底层技术都是相同的,因此我有兴趣查看任何语言的答案。

0 投票
10 回答
62440 浏览

c# - 如何在不同的 CPU 内核上生成线程?

假设我有一个 C# 程序,它做了一些计算成本很高的事情,比如将 WAV 文件列表编码为 MP3。通常我会一次对一个文件进行编码,但假设我想让程序弄清楚我有多少个 CPU 内核并在每个内核上启动一个编码线程。所以,当我在四核 CPU 上运行程序时,程序会发现它是四核 CPU,发现有四个内核可以使用,然后生成四个线程进行编码,每个线程都单独运行中央处理器。我该怎么做?

如果内核分布在多个物理 CPU 上,情况会有什么不同吗?例如,如果我的机器上有两个四核 CPU,是否有任何特殊考虑,或者在 Windows 中两个芯片上的八个内核是否相等?

0 投票
6 回答
12442 浏览

python - Python 线程有问题吗?

一位可靠的程序员朋友告诉我,Python 当前的多线程实现存在严重错误 - 足以完全避免使用。这个谣言能说什么呢?

0 投票
5 回答
4118 浏览

c++ - C++ 线程问题 - 设置一个值以指示线程已完成

以下安全吗?

我是线程新手,我想将一个耗时的过程委托给我的 C++ 程序中的单独线程。使用 boost 库,我编写了如下代码:

thrd = new boost::thread(boost::bind(&myclass::mymethod, this, &finished_flag);

其中finished_flag 是我班的布尔成员。当线程完成时,它会设置值,我的程序的主循环会检查该值的变化。我认为这没关系,因为我只启动一个线程,并且该线程是唯一改变值的东西(除非在我启动线程之前初始化它)所以这可以吗,或者我错过了什么,并且需要使用锁和互斥锁等

0 投票
18 回答
759236 浏览

multithreading - 什么是竞态条件?

在编写多线程应用程序时,最常见的问题之一是竞态条件。

我对社区的问题是:

  • 什么是比赛条件?
  • 你如何检测它们?
  • 你如何处理它们?
  • 最后,如何防止它们发生?
0 投票
17 回答
142417 浏览

multithreading - 什么是死锁?

在编写多线程应用程序时,最常见的问题之一是死锁。

我对社区的问题是:

  1. 什么是死锁?

  2. 你如何检测它们?

  3. 你会处理它们吗?

  4. 最后,您如何防止它们发生?

0 投票
15 回答
256737 浏览

multithreading - 什么是信号量?

信号量是一个经常用于解决多线程问题的编程概念。我对社区的问题:

什么是信号量以及如何使用它?

0 投票
10 回答
375922 浏览

multithreading - 什么是互斥锁?

互斥锁是一种经常用于解决多线程问题的编程概念。我对社区的问题:

什么是互斥体以及如何使用它?