Articles of 并发

是否只有一个Python解释器执行多个并发脚本?

我有一个Python脚本,它使用REST API以10MB的块向服务器发送4GB的数据。 无论我同时调用多less个脚本,我都能得到与客户端(10Gbnetworking,服务器类系统)完全相同的整体吞吐量: 1调用= 300MB / s 2个调用= 300MB / s 4个调用= 300MB / s 8个调用= 300MB / s 起初我虽然是某种磁盘读取限制,但我修改了脚本,以便它不需要硬盘驱动器访问,并使用最小的内存,我仍然得到完全相同的吞吐量。 执行期间的CPU和内存使用量是最小的。 进一步研究,我读了Python解释器是单线程的。 这很好(我猜是有道理的),但是尽pipe多个Python脚本被同时调用,是否有可能一次只调用一个Python解释器实例?

新Linux内核epoll中是否还有雷鸣群落问题?

我看到内核源代码中的fs/eventpoll.c是这样写的: static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, int maxevents, long timeout) { …. init_waitqueue_entry(&wait, current); __add_wait_queue_exclusive(&ep->wq, &wait); // *** NB …. } 这个“独占”是否意味着只有一个等待项目(用户空间中的进程或线程)会被唤醒? 但是当我写了一些testing代码的时候,我发现雷鸣的问题依然存在。 为什么不能解决呢? 谢谢!

多个Java进程可以同时读取同一个文件吗?

是否有可能同时从两个或更多不同的进程读取同一个文件? 我想在Java应用程序中做这样的事情: final File f = new File("read-only-file"); final FileInputStream in = new FileInputStream(f); int b; while((b = in.read()) != null) { //process b Thread.sleep(10); //several read processes would really happen at the same time } 没有应用程序会写入文件,但是有几个线程/应用程序需要同时执行上面的代码。 上面的代码是否正确,或者在这种情况下是否需要使用任何特殊的机制? 此外,解决scheme应该是平台无关的,并且必须像系统一样在Linux上工作。

如何仅在命令完成时输出

我使用&运行多个命令: curl "url1" –output /dev/null 2>> out & curl "url1" –output /dev/null 2>> out & wait 这不能很好地工作,因为输出行是交错的。 我希望每个curl都能保持它的输出,直到完成。 怎么做? 我知道我可以使用临时文件,concat在一起,然后删除。 有更好的方法吗? curl "url1" –output /dev/null 2>> out1 & curl "url1" –output /dev/null 2>> out2 & wait

在Linux中并发系统调用

这个问题很简单,我没有发现谷歌search的任何内容。 对Linux系统进行并发调用是安全的,比如同时调用多个线程上的socket() 。 具体来说,内核是否保证socket() , connect()和/或send()线程安全? 如果没有,为什么不呢? 我真的很想了解这个话题,以及为什么系统调用是线程安全的。 我主要关心的是socket()从不同的线程调用时不会返回重复或无效的文件描述符。 在我的情况下,我不会同时连接或写入同一个套接字。

都调用`fprintf(stdout,…)`和`fprintf(stderr,…)`保证与multithreading不交错?

假设我有两个线程打印stderr或stdout东西(相对较长),这两个线程的函数是线程安全的,他们永远不会“交错”字符? 所以,举个例子,如果我有“你好,世界”,我永远不会得到“HHellllo ,, WorldWorld”还是其他什么交错? 这是x86,GCC,Linux> 3.0。

不要运行一个cron php任务,直到最后一个完成

我有一个每隔5 minutes由cron运行的php-cli脚本。 由于这个间隔很短,所以同时运行multiple processes 。 这不是我想要的,因为这个脚本必须在文本文件中写入每次递增的数字id 。 发生这种情况的是writers正在同时写入这个文本文件,并且写入的值不正确。 我试图使用php的flock函数来阻止在文件中写入,当另一个进程正在写入,但它不起作用。 $fw = fopen($path, 'r+'); if (flock($fw, LOCK_EX)) { ftruncate($fw, 0); fwrite($fw, $latestid); fflush($fw); flock($fw, LOCK_UN); } fclose($fw); 所以我想这个解决scheme是创build一个bash脚本,validation是否有这个php script正在运行的实例,如果是的话,它应该等到它完成。 但我不知道该怎么做,有什么想法?

在Linux中的“写”function的问题

我正在尝试在Linux下编写2个服务器/客户端程序,通过命名pipe道进行通信。 问题是,有时当我尝试从服务器写入不存在的pipe道(客户端已停止)时,出现“资源暂时不可用”错误,服务器完全停止。 我知道这是由于在打开fifo chanel时使用O_NONBLOCK参数引起的,指出程序通常要等到它可以在文件中再次写入的地方,但有没有办法阻止这种行为,而不是停止整个程序如果发生问题(不应该写命令返回-1广告程序正常继续)? 而另一个奇怪的是,这个错误只发生在ide(日食)之外的程序运行。 如果我在eclipse中运行这两个程序,错误的写入function只返回-1,程序正常继续。

Linux服务器上的自动脚本(不是cron作业)

我正在Linux CentOS服务器上编程一个网站(我打算升级到一个VPS计划,我将拥有root权限)。 大部分网站将依靠自动化的脚本。 我有两个有关启动自动化stream程的问题。 有没有什么办法可以启动一个守护进程线程,或类似的东西,这将不断运行。 每次电子邮件帐户收到新电子邮件时,我都需要执行脚本。 我知道每分钟都可以运行的cron作业,但是有一个经常运行的脚本将是理想的,所以我可以在新的电子邮件到达的时候执行脚本。 有没有什么办法从代码(理想的PHP)启动一个线程,与主程序同时运行。 在我使用的脚本中,imap_open用于连接到一个电子邮件帐户,每次需要几秒钟。 但是,如果我可以同时触发多个并发脚本,那么理想情况下会减less程序的时间。 有没有办法做到这一点? 任何帮助这些问题将不胜感激。

同时运行两个程序

我有两个在Ubuntu中构build的C ++程序,我想同时运行它们。 我不想把它们合并成一个C ++项目,并在不同的线程上运行,因为这会导致我所有的问题。 我想要效仿的解决scheme是在terminal中打开两个选项卡,并在单独的选项卡中运行每个程序。 但是,我也想要一个程序(我们称之为程序A)能够退出并重新运行另一个程序(程序B)。 这在terminal上是无法实现的。 所以我想要做的是在程序A中编写一些C ++代码,可以随时运行和退出程序B. 这两个程序必须同时运行,以便程序A不必等到程序B返回之后再继续程序A. 有任何想法吗? 谢谢!