Questions tagged «multithreading»

多线程是计算机或程序通过利用多个并发的执行流(通常称为线程)来并发或异步执行工作的能力。

5
掌握Node JS替代多线程
如果我正确理解Node JS不会阻塞...,那么它就不必等待数据库或其他进程的响应,而是继续进行其他操作并稍后再检查。 它也是单线程的。 因此,这是否意味着给定的Node JS进程可以完全有效地利用单个CPU内核,但不会使用计算机上的任何其他内核,因为它永远不会一次使用多个内核。 当然,这意味着其他进程仍可以将其他CPU用于其他事物,例如SQL数据库或其他有意分离的CPU重子例程,只要它们是独立的进程即可。 同样,如果Node JS进程具有无限循环或长时间运行的功能,则在停止无限循环或长时间运行的功能(或终止整个进程)之前,该进程将不再有用。 这一切对吗?我的理解正确吗?

9
返回语句应该在锁的内部还是外部?
我只是意识到在代码的某些地方,return语句位于锁内部,有时位于外部。哪一个是最好的? 1) void example() { lock (mutex) { //... } return myData; } 2) void example() { lock (mutex) { //... return myData; } } 我应该使用哪一个?
142 c#  .net  multithreading  mutex 


6
线程和多处理模块之间有什么区别?
我正在学习如何在Python中使用threading和multiprocessing模块并行运行某些操作并加快代码速度。 我发现很难理解一个threading.Thread()对象与一个对象之间的区别(也许是因为我没有任何理论背景)multiprocessing.Process()。 另外,对我来说,如何实例化一个作业队列并使其只有4个(例如)并行运行,而另一个则等待资源释放后再执行,对我来说也不是很清楚。 我发现文档中的示例很清楚,但并不十分详尽。一旦尝试使事情复杂化,我就会收到很多奇怪的错误(例如无法腌制的方法,等等)。 那么,什么时候应该使用threadingand multiprocessing模块? 您能否将我链接到一些资源,以解释这两个模块的概念以及如何在复杂的任务中正确使用它们?

8
!=检查线程安全吗?
我知道诸如之类的复合操作i++不是线程安全的,因为它们涉及多个操作。 但是,检查引用本身是否是线程安全的操作? a != a //is this thread-safe 我尝试对此进行编程,并使用多个线程,但没有失败。我想我无法在机器上模拟种族。 编辑: public class TestThreadSafety { private Object a = new Object(); public static void main(String[] args) { final TestThreadSafety instance = new TestThreadSafety(); Thread testingReferenceThread = new Thread(new Runnable() { @Override public void run() { long countOfIterations = 0L; while(true){ boolean …


1
如何获得等待的Thread.Sleep?
我正在写一个基于等待/睡眠模式的网络绑定应用程序。 有时会发生连接错误,以我的经验,等待一段时间然后再次重试操作是值得的。 问题是,如果我在wait / async中使用Thread.Sleep或其他类似的阻止操作,它将阻止调用者线程中的所有活动。 我应该用Thread.Sleep(10000)代替以达到与 await Thread.SleepAsync(10000) ? 更新 我希望这样做而不创建任何其他线程的答案

12
从多个线程从java.util.HashMap获取值是否安全(无修改)?
在某些情况下,将构造一个映射,并且一旦对其进行初始化,就永远不会再对其进行修改。但是,它将从多个线程访问(仅通过get(key))。java.util.HashMap以这种方式使用安全吗? (当前,我很乐意使用java.util.concurrent.ConcurrentHashMap,并没有提高性能的需要,但是只是HashMap想知道一个简单的方法是否足够。因此,这个问题不是 “我应该使用哪个?”,也不是一个性能问题。相反,问题是“安全吗?”)

13
如何阐明异步编程和并行编程之间的区别?
许多平台都将异步和并行性作为提高响应能力的手段。我通常了解这种差异,但经常发现我和其他人都难以阐明。 我是一个工作日的程序员,经常使用异步和回调。并行感让人感到异国情调。 但是我觉得它们很容易混淆,特别是在语言设计级别。很想清楚地描述它们之间的关系(或不存在关系),以及最适合应用它们的程序类别。


11
线程与线程池
使用新线程和使用线程池中的线程有什么区别?有哪些性能优势?为什么我应该考虑使用池中的一个线程而不是我明确创建的线程?我在这里专门考虑.NET,但一般示例都可以。


6
Java静态初始化程序线程安全吗?
我正在使用静态代码块来初始化我拥有的注册表中的某些控制器。因此,我的问题是,我可以保证在首次加载该类时,该静态代码块仅被绝对调用一次吗?我知道我不能保证何时会调用此代码块,我猜是在Classloader首次加载时。我意识到我可以在静态代码块中的类上进行同步,但是我猜这实际上是怎么回事? 简单的代码示例将是; class FooRegistry { static { //this code must only ever be called once addController(new FooControllerImpl()); } private static void addController(IFooController controller) { // ... } } 还是我应该这样做; class FooRegistry { static { synchronized(FooRegistry.class) { addController(new FooControllerImpl()); } } private static void addController(IFooController controller) { // ... } }

5
为什么CancellationToken与CancellationTokenSource分开?
我正在寻找为什么CancellationToken除了CancellationTokenSource类之外还引入了.NET 结构的理由。我了解如何使用API​​,但也想了解为什么采用这种方式设计。 即,为什么有: var cts = new CancellationTokenSource(); SomeCancellableOperation(cts.Token); ... public void SomeCancellableOperation(CancellationToken token) { ... token.ThrowIfCancellationRequested(); ... } 而不是CancellationTokenSource像这样直接传递: var cts = new CancellationTokenSource(); SomeCancellableOperation(cts); ... public void SomeCancellableOperation(CancellationTokenSource cts) { ... cts.ThrowIfCancellationRequested(); ... } 这是否基于以下事实进行性能优化:取消状态检查比传递令牌更频繁? 这样就CancellationTokenSource可以跟踪和更新CancellationTokens,对于每个令牌,取消检查是本地访问? 鉴于在两种情况下没有锁定的挥发性布尔变量就足够了,我仍然不明白为什么这样做会更快。 谢谢!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.