Tag: multithreading

为什么Web应用程序现在正在等待/asynchronous疯狂?

我来自后端/厚客户端的背景,所以也许我错过了一些东西……但我最近看了一个开源JWT令牌服务器的源代码,作者疯狂地等待/asynchronous。 就像每一个方法和每一行一样。 我得到的模式是…在一个单独的线程中运行长时间运行的任务。 在我密集的客户日子里,如果一个方法可能需要几秒钟,我会使用它,以免阻塞GUI线程…但绝对不是一个需要几ms的方法。 这是过度使用等待/asynchronous的东西你需要的Web开发或像Angular的东西? 这是在一个JWT令牌服务器,所以甚至没有看到它与任何这些。 这只是一个REST的终点。 如何使每一行asynchronous改善性能? 对我来说,它会杀死所有这些线程的performance,不是吗?

睡眠方法和multithreading产出方法有什么区别?

正如当前正在执行的线程在遇到呼叫时[sleep][1](); 那么线程立即移动到睡眠状态,其中[yield][2](); 线程进入可运行状态/就绪状态

不变性和重新sorting

评论接受的答案 这个问题产生的热量比我想象中的要多得多。 一个重要的结论,我从与并发利益邮件列表成员(即实际工作的人)的公共和私人讨论中吸取了一些重要的结论: 如果你可以find一个顺序一致的重新sorting,不会中断任何线程间发生的关系,这是一个有效的重新sorting(即符合程序顺序规则和因果关系要求)。 约翰·文特(John Vint)在他的回答中提供了这一点。 原来的问题 下面的代码(Java Concurrency in Practice列表16.3)不是线程安全的,原因很明显: public class UnsafeLazyInitialization { private static Resource resource; public static Resource getInstance() { if (resource == null) resource = new Resource(); // unsafe publication return resource; } } 然而,在几页之后的16.3节中,他们指出: 如果 Resource不可变, UnsafeLazyInitialization实际上是安全的。 我不明白这个说法: 如果Resource是不可变的,那么任何观察resourcevariables的线程将会看到它为null或完全构造(由于Java Memory模型提供的最终字段的强有力的保证) 然而,没有什么可以防止指令重新sorting:特别是两个resource读取可以重新sorting(有一个读取的if和return )。 所以一个线程可以在if条件中看到一个非null的resource ,但返回一个空引用(*)。 我认为即使Resource是不可变的, UnsafeLazyInitialization.getInstance()也可以返回null。 是这样,为什么(或为什么不)? 注:我期望有一个有争议的答案,而不是单纯的是或否的陈述。 (*)为了更好地理解我关于重新sorting的观点,作为JLS第17章并发性之一的作者之一的Jeremy […]

当谈论线程和进程时,为什么说“不要同时格式化软盘”的评论很有趣?

我正在阅读Thread和Processes之间的区别, 并在第二个答案中提到用户留下的评论 只要您不要同时格式化软盘。 它有27个投票,但没有人解释它背后的原因。 我想知道评论者在提到上述评论时意味着什么? 有人可以build议一个更有意义的问题名称,这反映了问题的要求

双重检查locking单身人士在C + + 11

下面的单例实现数据竞赛是免费的吗? static std::atomic<Tp *> m_instance; … static Tp & instance() { if (!m_instance.load(std::memory_order_relaxed)) { std::lock_guard<std::mutex> lock(m_mutex); if (!m_instance.load(std::memory_order_acquire)) { Tp * i = new Tp; m_instance.store(i, std::memory_order_release); } } return * m_instance.load(std::memory_order_relaxed); } 加载操作的std::memory_model_acquire是多余的? 是否有可能通过切换到std::memory_order_relaxed进一步放宽加载和存储操作? 在这种情况下, std::mutex的获取/释放语义是否足以保证其正确性,或者需要进一步的std::atomic_thread_fence(std::memory_order_release)来确保构造函数的内存写入发生在轻松的商店? 然而,使用围栏相当于有memory_order_release商店吗? 编辑 :感谢约翰的答案,我想出了下面的应该是免费的数据竞赛的实现。 即使内部的负载可能是非primefaces的,我决定放松一下,不影响性能。 相比之下,总是有获取内存顺序的外部负载,thread_local机制提高了访问实例大约一个数量级的性能。 static Tp & instance() { static thread_local Tp *instance; if (!instance && !(instance […]

读取一个不locking的并发修改的整数variables是否安全?

假设我在一个类中有一个整型variables,这个variables可能会被其他线程同时修改。 写入受互斥体保护。 我还需要保护阅读吗? 我听说有一些硬件体系结构,如果一个线程修改一个variables,另一个线程读取它,那么读取的结果将是垃圾; 在这种情况下,我确实需要保护读取。 我从来没有见过这样的体系结构。 这个问题假定单个事务只包含更新一个整型variables,所以我不担心任何其他variables的状态也可能涉及到一个事务。

如何在纯C中启动线程?

我在C中使用fork()来启动另一个进程。 我如何开始一个新的线程?

在C#中locking关键字

我理解MSDN中locking关键字的主要function locking语句(C#参考) lock关键字通过获取给定对象的相互排斥锁,执行语句,然后释放锁,将语句块标记为关键部分。 什么时候应该使用锁? 例如,它对于multithreading应用程序是有意义的,因为它保护了数据。 但是,当应用程序不分离任何其他线程时是否有必要? 使用locking是否存在性能问题? 我刚刚inheritance了一个使用锁的应用程序,它是单线程的,我想知道我应该把它们放在哪里,甚至是必要的? 请注意,这是一个更常见的知识问题,应用程序的速度是好的,我想知道,如果这是一个很好的devise模式将来要跟随或应该避免,除非绝对需要。

清理遍布InvokeRequired的代码

我知道,从任何非UI线程操纵UI控件时,您必须将您的调用编组到UI线程以避免问题。 一般的共识是你应该使用testingInvokeRequired,如果是true,则使用.Invoke来执行编组。 这导致了很多看起来像这样的代码: private void UpdateSummary(string text) { if (this.InvokeRequired) { this.Invoke(new Action(() => UpdateSummary(text))); } else { summary.Text = text; } } 我的问题是:我可以省略InvokeRequiredtesting,只需调用Invoke,如下所示: private void UpdateSummary(string text) { this.Invoke(new Action(() => summary.Text = text)); } 这样做有问题吗? 如果是这样,有没有更好的方法来保持InvokeRequiredtesting,而不必复制和粘贴这个模式到处?

在Objective-C的主线程中检测代码是否正常运行的正确方法是什么? (iOS)

我的代码需要保证在主线程上运行某个操作,但是调用可能来自后台线程。 要在后台检测情况,我正在使用以下内容: – (void)selectorToRunInMainThread:(id)arguments { // push to main thread if ([NSRunLoop currentRunLoop] != [NSRunLoop mainRunLoop]) { [self performSelectorOnMainThread:@selector(selectorToRunInMainThread:) withObject:arguments waitUntilDone:NO]; return; } /* … function content … */ } 这适用于iOS 4和iOS 3.2,但不适用于iOS 3.1.3和更早版本。 在这些早期的版本中,这个函数将会不停地被调用。 将比较改为: if (![[NSRunLoop currentRunLoop] isEqualTo:[NSRunLoop mainRunLoop]]) 没有任何作用,他们仍然没有比较相同的价值。 我发现一个似乎正在工作的解决scheme,但我想看看其他人首先提出的build议。