天道酬勤,学无止境

concurrency

PHP 作为 FastCGI 应用程序 (php-cgi) 运行 - 如何发出并发请求?(PHP running as a FastCGI application (php-cgi) - how to issue concurrent requests?)

问题 编辑:更新 - 向下滚动编辑 2:更新 - 问题解决一些背景资料: 我正在用 Java 编写自己的网络服务器,几天前我问过 Apache 与 PHP 的接口究竟如何,以便我可以实现 PHP 支持。 我了解到 FastCGI 是最好的方法(因为 mod_php 不是一个选项)。 所以我查看了 FastCGI 协议规范,并设法为我的服务器编写了一个有效的 FastCGI 包装器。 我已经测试了 phpinfo() 并且它可以工作,实际上所有 PHP 函数似乎都可以正常工作(发布数据、会话、日期/时间等)。 我的网络服务器能够同时处理请求(即用户 1 可以在用户 2 请求 some_large_binary_file.zip 的同时检索 file1.html),它通过为每个用户请求生成一个新的 Java 线程来实现(在完成或用户与客户端的连接时终止)取消)。 但是,它不能同时处理 2 个(或更多)FastCGI 请求。 它的作用是将它们排队,因此当请求 1 完成后立即开始处理请求 2。我用 2 个 PHP 页面对此进行了测试,一个包含 sleep(10),另一个包含 phpinfo()。 我将如何处理多个请求,因为我知道它可以完成(IIS 下的 PHP 作为 FastCGI 运行,它可以很好地处理多个请求)。 更多信息: 我在 windows 下编码,我用来执行 php-cgi

2021-06-21 11:19:14    分类:技术分享    php   concurrency   fastcgi

Haskell 快速并发队列(Haskell fast concurrent queue)

问题 问题 你好! 我正在编写一个日志库,我很想创建一个记录器,它会在单独的线程中运行,而所有应用程序线程只会向它发送消息。 我想为这个问题找到最高效的解决方案。 我在这里需要简单的未绑定队列。 方法 我已经创建了一些测试来查看可用解决方案的执行情况,我在这里得到了非常奇怪的结果。 我基于以下内容测试了 4 个实现(源代码如下): 管道并发控制.并发.Chan 控制.并发.Chan.Unagi 基于 MVar,如“Haskell 中的并行和并发编程”一书中所述 请注意,此技术为我们提供了容量为 1 的有界队列 - 它仅用于测试 测试 这是用于测试的源代码: {-# LANGUAGE NoMonomorphismRestriction #-} import Control.Concurrent (threadDelay) import Control.Monad (forever) import Pipes import qualified Pipes.Concurrent as Pipes import Control.Applicative import Control.Monad (replicateM_) import System.Environment (getArgs) import Control.Concurrent.Chan import Control

2021-06-21 11:16:51    分类:技术分享    haskell   concurrency   profiling   stm   haskell-pipes

JavaFX UI Freezing Issue

I am trying to show the progress and the status of the each task. Each task represents by a row into TableView. Each task executs parallel in each Thread. Please refer image of TableView. For "Progress" TableColumn I have set Cell Factory to render `ProgressBar". public static class ProgressBarTableCell<S, T> extends TableCell<S, T> { private final ProgressBar progressBar; private ObservableValue<T> ov; public ProgressBarTableCell() { this.progressBar = new ProgressBar(); progressBar.setPrefHeight(23); setAlignment(Pos.CENTER); } @Override public void updateItem(T item, boolean empty) { super

2021-06-21 10:32:39    分类:问答    java   multithreading   concurrency   javafx-2

Go(lang) 中的地址空间是什么?(What is the address space in Go(lang)?)

问题 我试图了解 Go 中并发编程的基础知识。 几乎所有文章都使用术语“地址空间” ,例如: “所有 goroutine 共享相同的地址空间” 。 这是什么意思? 我试图从 wiki 了解以下主题,但没有成功: http://en.wikipedia.org/wiki/Virtual_memory http://en.wikipedia.org/wiki/Memory_segmentation http://en.wikipedia.org/wiki/Page_(computer_memory) ... 但是目前对我来说很难理解,因为我在内存管理和并发编程等领域的知识真的很差。 有许多未知词,如段、页面、相对/绝对地址、VAS 等。 有人可以向我解释问题的基本原理吗? 可能有一些有用的文章,我找不到。 回答1 团体规格: “ go ”语句作为一个独立的并发控制线程或goroutine在同一地址空间内启动函数调用的执行。 有人可以向我解释问题的基本原理吗? “地址空间”是一个通用术语,可应用于多种情况: 地址空间是通过组合足够多的唯一标识限定符来创建的,以使地址明确(在特定地址空间内) Dave Cheney 的演讲“让 Go 变得更快的五件事”说明了在同一进程地址空间中使用 goroutine 解决的主要问题:堆栈管理。 Dave's 限定了“地址空间”,首先谈到线程:

2021-06-21 09:56:49    分类:技术分享    memory   memory-management   concurrency   go   parallel-processing

并发集合上的 linq 操作线程安全吗?(Are linq operations on concurrent collections thread safe?)

问题 例如以下代码线程安全: ConcurrentQueue<Guid> _queue = new ConcurrentQueue<Guid>(); while(true) { for(int y = 0; y < 3; y++) { if(y % 3 == 0) { System.Threading.Tasks.Task.Run(() => _queue.Enqueue(Guid.NewGuid())); } else if (y % 3 == 1) { Guid x; System.Threading.Tasks.Task.Run(() => _queue.TryDequeue(out x)); } else if(y % 3 == 2) { System.Threading.Tasks.Task.Run(() => { if (_queue.Any(t => t == testGuid)) { // Do something } }); } } 编辑:显然标题不够清楚,因此更新了代码示例以包含实际的多线程行为,是的,上面的代码只是多线程行为的示例。 回答1 LINQ 操作是只读的,因此它们在所有集合上都是线程安全的。 当然,如果您在Where或Select方法中添加修改集合的代码,它们就不再是线程安全的。 线程安全集合确保修改是线程安全的,这在执行 LINQ

2021-06-21 09:28:42    分类:技术分享    c#   linq   concurrency

为什么存储负载屏障被认为是昂贵的?(Why is a store-load barrier considered expensive?)

问题 大多数 CPU 架构会重新排序存储加载操作,但我的问题是为什么? 我对存储加载屏障的解释如下: x = 50; store_load_barrier; y = z; 此外,与释放和获取语义相比,我看不出这个障碍在无锁编程中有多大用处。 回答1 简短回答:存储加载屏障可防止处理器推测性地执行存储加载屏障之后的 LOAD,直到所有先前的存储完成。 详情: 存储加载屏障昂贵的原因是它阻止了跨屏障的 LOAD 和 STORE 操作的重新排序。 假设您有一个如下所示的指令序列: ... ;; long latency operation to compute r1 ST r1, [ADDR1] ;; store value in r1 to memory location referenced by ADDR1 LD r3, [ADDR2] ;; load r3 with value in memory location ADDR2 ... ;; instructions that use result in r3 当这个序列执行时, r1的值将是一个需要很长时间才能完成的操作的结果。 指令ST r1, [ADDR1]将不得不暂停,直到r1被读取。同时LD r3, [ADDR2]如果LD r3, [ADDR2]和其他指令独立于较早的存储,则乱序处理器可以推测性地执行它们。

2021-06-21 09:03:32    分类:技术分享    multithreading   concurrency   cpu-architecture   lock-free

Convert wait & notifyAll code to use Java 1.5 Lock object

We use code that uses syncronized blocks around segments of code with a lot of wait and notifyAll() calls. We are trying to convert these to use Java 5 Lock.lock() and Lock.unlock() methods. How do I migrate this code to remove all the wait and notifyAll calls. I do not know the equivalent to these using the new Locking features. Any links with examples would be appreciated. Thanks in Advance Eq., the following code needs to be converted to use Lock.lock() and lock.unlock The first part to remove the synchronized block is simple as I just need to call lock() method. The question is what can be

2021-06-15 17:57:38    分类:问答    java   multithreading   concurrency   thread-safety

How to efficiently make 1000s of web requests as quickly as possible

I need to make 100,000s of lightweight (i.e. small Content-Length) web requests from a C# console app. What is the fastest way I can do this (i.e. have completed all the requests in the shortest possible time) and what best practices should I follow? I can't fire and forget because I need to capture the responses. Presumably I'd want to use the async web requests methods, however I'm wondering what the impact of the overhead of storing all the Task continuations and marshalling would be. Memory consumption is not an overall concern, the objective is speed. Presumably I'd also want to make use

2021-06-15 16:17:32    分类:问答    c#   asynchronous   concurrency

What is the Thread.State of a thread after Thread.yield()?

What is the Thread.State of a thread after Thread.yield() ? Is it a Thread.State.WAITING? Thanks.

2021-06-15 15:02:43    分类:问答    java   concurrency

How Erlang processes access mailbox concurrently

There are lots of info regarding how to use erlang mailbox, but seldom to find a paper or document describe how erlang actual access mailbox concurrently internally within the VM. To my understanding, Erlang VM must have to do locking or CAS action to secure message integrity. Is there any sophisticate way of method behind erlang's curtain

2021-06-15 14:30:11    分类:问答    concurrency   erlang   locking