问题标签 [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.
java - Java:再次通知()与通知所有()
notify()
如果有人用谷歌搜索“和之间的差异notifyAll()
”,那么会弹出很多解释(撇开 javadoc 段落)。这一切都归结为被唤醒的等待线程的数量:一个 innotify()
和 all in notifyAll()
。
但是(如果我确实理解这些方法之间的区别),总是只选择一个线程用于进一步的监视器采集;在第一种情况下,由 VM 选择,在第二种情况下,由系统线程调度程序选择。程序员不知道它们(在一般情况下)的确切选择过程。
那么notify()和notifyAll()之间有什么有用的区别呢?我错过了什么吗?
c++ - 面向任务的线程池
我创建了一个模型,用于使用与 IO 完成端口关联的线程池在服务器应用程序中执行工作任务,如下面的帖子所示:
http://blogs.msdn.com/larryosterman/archive/2004/03/29/101329.aspx
boost 中是否有任何类可以帮助这种编程模型?
c# - 应用程序如何在 .NET 或 Java 中使用多个内核或 CPU?
在 .NET 或 Java 中启动线程或进程时,是否可以选择在哪个处理器或内核上启动它?在这种情况下,共享内存模型如何工作?
python - 如何让 Ruby 或 Python 网站使用多核?
尽管Python和Ruby每个解释器线程都有一个内核线程,但它们有一个全局解释器锁 (GIL),用于保护可能共享的数据结构,因此这会抑制多处理器执行。即使那些用 C 或 C++ 编写的语言中的部分可以是自由线程的,除非您使用多个进程,否则纯解释代码是不可能的。实现这一目标的最佳方法是什么?使用 FastCGI吗?创建集群或虚拟化服务器场?使用它们的 Java 等价物 JRuby 和 Jython?
java - 多个线程卡在本机调用中(Java)
我在使用 JDK 1.5.0_08 的 Fedora Core 6 上运行的应用程序有问题。
经过一定的正常运行时间(通常是几天)后,线程开始卡在本机方法中。
线程被锁定在这样的地方:
或者
让我特别困惑的是这个:
在 VM 重新启动之前,线程会一直卡住。
谁能给我一个关于这里发生了什么的想法,什么可能导致本机方法阻塞?每个卡住的线程顶部的监视器入口地址范围是不同的。我怎样才能弄清楚这个显示器是什么?
任何建议或意见将不胜感激!
谢谢,大卫
c++ - 用于执行具有不同优先级的任意任务的线程池
我正在尝试为我的工作提出很多设计要求的线程池设计。这对于工作软件来说是一个真正的问题,而且是一项艰巨的任务。我有一个可行的实现,但我想把它扔给 SO,看看人们能想出什么有趣的想法,这样我就可以与我的实现进行比较,看看它是如何叠加的。我试图尽可能具体地满足要求。
线程池需要执行一系列任务。任务可以是短期运行(<1 秒)或长期运行(数小时或数天)。每个任务都有一个关联的优先级(从 1 = 非常低到 5 = 非常高)。任务可以在其他任务运行时随时到达,因此当它们到达时,线程池需要在线程可用时拾取它们并安排它们。
任务优先级完全独立于任务长度。事实上,如果不运行一个任务,就不可能知道它需要多长时间才能运行。
有些任务受 CPU 限制,而有些任务受 IO 限制。不可能事先知道给定的任务是什么(尽管我猜可能在任务运行时检测到)。
线程池的主要目标是最大化吞吐量。线程池应该有效地使用计算机的资源。理想情况下,对于 CPU 密集型任务,活动线程的数量将等于 CPU 的数量。对于 IO 绑定任务,应分配比 CPU 更多的线程,以便阻塞不会过度影响吞吐量。尽量减少锁的使用和使用线程安全/快速容器很重要。
通常,您应该以更高的 CPU 优先级运行更高优先级的任务(参考:SetThreadPriority)。较低优先级的任务不应“阻止”较高优先级的任务运行,因此如果在所有低优先级任务都在运行时出现较高优先级的任务,则较高优先级的任务将开始运行。
这些任务有一个与之关联的“最大运行任务”参数。每种类型的任务一次最多只能运行该任务的这么多并发实例。例如,我们可能在队列中有以下任务:
- A - 1000 个实例 - 低优先级 - 最大任务 1
- B - 1000 个实例 - 低优先级 - 最大任务 1
- C - 1000 个实例 - 低优先级 - 最大任务 1
一个工作实现只能(最多)同时运行 1 A、1 B 和 1 C。
它需要在 Windows XP、Server 2003、Vista 和 Server 2008(最新的服务包)上运行。
作为参考,我们可以使用以下接口:
javascript - 为什么 JavaScript 不支持多线程?
这是一个深思熟虑的设计决定,还是我们当前浏览器的问题,这些问题将在未来的版本中得到纠正?
javascript - 多线程 javascript 的安全隐患
通读这个关于多线程 javascript 的问题,我想知道在允许 javascript 产生多线程时是否会有任何安全隐患。例如,是否存在恶意脚本反复生成线程以试图压倒操作系统或解释器并触发进入“未定义行为领域”的风险,或者这几乎不是问题?攻击可能利用支持非线程实现将免疫的线程的 javascript 的假设实现的任何其他方式?
更新: 请注意,锁定浏览器与创建未定义的行为漏洞利用不同。
asp.net - 多线程环境中的文件访问策略(Web App)
我有一个文件,它是一些数据的 XML 表示,这些数据取自 Web 服务并在 Web 应用程序中本地缓存。这个想法是这些数据是非常静态的,但可能会改变。因此,我将其设置为缓存到文件中,并在其上放置了一个监视器以检查它是否已被删除。删除后,文件将从其源刷新并重建。
不过,我现在遇到了问题,因为显然在多线程环境中,当它仍在读取/写入文件时尝试访问数据时,它会崩溃。
这让我很困惑,因为我添加了一个要锁定的对象,并且在读/写期间它总是被锁定。我的理解是,尝试从其他线程访问会被告知“等待”直到锁被释放?
只是让你知道,我是多线程开发的新手,所以我完全愿意接受这是我的一个错误:)
- 我错过了什么吗?
- 多线程环境中最好的文件访问策略是什么?
编辑
抱歉 - 我应该说这是使用ASP.NET 2.0 :)
c# - 从多个线程进行单元测试的最佳方法是什么?
这是我的另一个问题的后续。
基本上,一旦我有了访问文件的代码(将在一分钟内查看答案),测试它的最佳方法是什么?
我正在考虑创建一种方法,它只会产生大量BackgroundWorker或其他东西,并告诉它们全部加载/保存文件,并使用不同的文件/对象大小进行测试。然后,从线程中获取响应以查看它是否失败/成功/使世界内爆等。
你们能就解决这个问题的最佳方法提供任何建议吗?正如我之前所说,这对我来说有点新鲜 :)
编辑
在ajmastrean 的帖子之后:
我正在使用控制台应用程序来测试 Debug.Asserts :)
更新
我最初使用BackgroundWorker来处理线程(因为我已经习惯了 Windows 开发人员的线程)我很快意识到,当我执行需要完成多个操作(线程)才能继续进行的测试时,我意识到这将是让它做到这一点有点技巧。
然后我跟进了ajmastrean的帖子,并意识到我真的应该使用Thread类来处理并发操作。我现在将使用这种方法进行重构(尽管方法不同)。