首先,我欢迎对这个问题的标题进行编辑,我想不出如何更好地表达它,但我对自己的想法不太满意
这是一个关于并发性的问题,我的应用程序在C语言的微控制器上,但我认为这没什么大不了的
我有一个中断程序,可以改变两个全局变量的值。我有一些可以读取这些变量的主代码。但它必须从两个集合中获取一致的值,这意味着我不能先读取一个,然后再读取另一个,因为中断可能发生在这两个集合之间,并同时更改它们,使我只能从一个集合中读取一个,从另一个集合中读取一个
通常我只会对读取两个变量的代码的一小部分禁用中断,但我不能这样做
我有一个Azure web角色,有两个实例。两个实例都“准备就绪”-运行正常
在我的桌面上,有四个相同程序的实例同时运行,并通过HTTP请求点击web角色URL。然而,根据日志,所有请求仅被调度到实例0。我需要将请求发送到两个实例以测试并发操作
为什么不将请求发送到第二个实例,以及如何将它们发送到第二个实例?这可能是由于负载平衡器优化了请求路由,因为所有请求都来自同一IP。虽然看起来很像,但Azure中的LB并不是真正的愚蠢循环
如果您没有预料到这一点,但是服务器正在处理负载,那么您就没事了。您
例如,如果我使用c程序中的system()命令来调用shell命令,那么它是完成shell命令,然后继续执行程序,还是同时执行这两个命令
查找此信息的各种方法有哪些?您可以使用fork()或exec()进行非阻塞,但是system()调用正在阻塞。这意味着在继续执行C程序之前,它将等待shell命令完成
注意:如果您希望它立即返回,您可以发出系统命令,命令后面有一个&,您的C程序将同时运行
顺序示例:
system(“long_script.sh”)
并发示例:
系统(“long_script.
以下语句中的“切片”是什么意思:
p0 tests lock (now, slice before actually setting lock)
作者试图表明此程序不符合互斥条件。
它是从
谢谢。从上下文来看,我相信这意味着上下文切换(即当前点有一个时间片边界)。因此,
意味着
p0 tests lock (now, slice before actually setting lock)
p1 tests lock (this makes p1 think it is still availa
我偶尔会看到一种模式,gen_服务器的init/1函数将向自身发送一条消息,表示应该初始化它。这样做的目的是让gen_server进程异步初始化自身,以便生成它的进程不必等待。以下是一个例子:
-module(test).
-compile(export_all).
init([]) ->
gen_server:cast(self(), init),
{ok, {}}.
handle_cast(init, {}) ->
io:format("initial
我目前拥有以下代码:
package main
import (
"fmt"
"math/rand"
"time"
)
var channel = make(chan []float32, 1)
func main() {
aMap := initMap()
for key := range aMap {
fmt.Print("the iteration number is: ", key)
theSlice :=
我开始学习并发编程
我知道有些优先图不能仅用COBEGIN-COEND构造(由Dijkstra于1968年引入)来表示
所以
有什么算法可以知道什么时候优先图可以用COBEGIN-COEND表示
多谢各位
巴勃罗
我只是对lisp编程感到好奇,并想
知道如何通过创建线程来使用并发lisp
-我还想清楚lisp中的pcall()函数
对问题的评论为您提供了解决问题的正确方法。我希望这仍然有用
如果您想在common lisp中使用并发,其中一种方法是Earge Future2,但是您可以在这里选择其他模型
正如顾名思义,热切的未来是建立在未来的基础上的
“Eager Future2是一个通用的Lisp库,提供可组合的
统一并行计算和延迟计算的并发原语是
与CL的状态系统集成,并具有自动资源
管理层。
渴望未
我刚刚读了这篇文章:为了在处理程序之间共享值,我选择了,并以以下方式使用它在处理程序和中间件之间共享值:
type appContext struct {
db *sql.DB
ctx context.Context
cancel context.CancelFunc
}
func (c *appContext)authHandler(next http.Handler) http.Handler {
fn := func(w http.Res
根据并发编程中锁和二进制信号量的概念,为什么没有锁的线程不能解锁锁,而没有获取/等待锁的线程可以释放/通知二进制信号量
二进制信号量是锁吗?那么我的问题应该是二进制信号量还是不是二进制信号量的锁
谢谢。如果你按规则玩的话,二进制信号量确实是一个锁。如果其他线程在获取锁之前刚刚进入关键部分,为什么要使用锁?锁是锁吗?糟糕的实现并不意味着它不能用作锁。在《杰拉德对你》标题中的问题中,我觉得很有趣,也不知道为什么。
这是一个面试问题,任何帮助都将不胜感激
如何同步两个进程,其中一个进程增加一个值并显示该值(请注意,显示该值的进程必须仅在其为新值时显示一个值)
Ex:int x=5;
P1:将其增加到6
P2:必须显示6(仅一次),并且在变为7时必须再次显示
我回答说我会用一个信号灯,比如
int c=0; // variable that I used to synchronize
// In P1
if( c = 0 )
{
c++;
x++; // value that is incre
我有一个Nvidia GeForce GTX 1080,带有20个流式多处理器。我想使用CUDA移植一个碰撞检测系统,该系统在代码中有多个分支,具体取决于碰撞对象的类型。例如:检查球体和圆柱体是否发生碰撞的代码与检查球体和另一球体之间碰撞的代码不同。为了提高性能和减少代码差异,我考虑在单独的内核中并行运行这些分支,因为我的设备支持并发内核执行。在这种情况下,有没有办法为每个内核分配特定数量的CUDA内核
我试图在CUDA开发者指南页面和堆栈溢出页面上找到如何做到这一点,但未能找到一种方法来定制将
我有一个家庭作业,要求我学习如何使用Guava并发库
在这个任务中,我有几个线程池,每个线程池都由一个单独的对象控制
每个池都有几个执行简单任务的工作线程(主要是通过使用Thread.sleep(long))模拟执行任务),所有这些简单任务都存储在模拟留言板的容器对象中
每个简单任务都有一个其他任务的依赖项列表,在所有这些任务完成之前,无法执行该任务
使用ListenableFuture和Futures.chain(),我如何从Guava库中获益
我在网上到处搜索了一些广泛的示例代码,但没有找到
正如我所测试的,当我创建新代理时,每个新代理都使用一个单独的线程。
可以在一个线程中运行多个代理吗
我的想法是创建10K+的轻量级代理(如erlang中的演员),那么这对Clojure来说是一个挑战吗
谢谢这是不正确的。代理使用一个线程池,其大小为核心数+2。因此,在四核机器上,即使10k+代理也只使用6个工作线程
使用发送,即。使用发送将启动新线程。考虑使用j.u.c.DelayQueue
这是一个如何工作的草图
(delayed函数在这里有点麻烦,但它基本上构造了一个j.u.c.delaye
我完成了树比较的go tour练习(#69),能够有效地比较两棵树。这是密码
package main
import "tour/tree"
import "fmt"
// Walk walks the tree t sending all values
// from the tree to the channel ch.
func Walk(t *tree.Tree, ch chan int) {
if t == nil {
在阅读ArrayBlockingQueue的源代码时,我发现以下代码:
public E take() throws InterruptedException {
final ReentrantLock lock = this.lock;
lock.lockInterruptibly();
try {
try {
while (count == 0)
notEmpty.await();
有很多关于如何使用erlang邮箱的信息,但很少有论文或文档描述如何在VM内部并发访问erlang邮箱
据我所知,ErlangVM必须执行锁定或CAS操作以确保消息完整性。在erlang的窗帘后面有没有什么复杂的方法我想你指的是流程邮箱,邮件插入的邮箱。有趣的问题
有一些关于Erlang进程消息队列的锁定特性的对话:
只是好奇:目前在发送消息时存在某种锁。
是否有人尝试实现无锁链接列表:
或者我只是看错了地方,而erts\u smp\u proc\u锁已经打开了
用这样的东西
消息队列已经有了
我确信对于这种琐碎的情况有一个简单的解释,但我对go并发模型是新手
当我运行这个示例时
package main
import "fmt"
func main() {
c := make(chan int)
c <- 1
fmt.Println(<-c)
}
为什么?
包装c来自:
如果通道无缓冲,发送方将阻塞,直到接收方收到该值。如果通道有一个缓冲区,发送方只会阻塞,直到值
已复制到缓冲区;如果缓冲区已满,这意味着
等待某个接收器检索到
我正在制作一个程序,将身份证号码分为房间和组。我试图对多个并行进程的输出进行排序,但结果是这样的
{'C003','Group A',1}
{'C002','Group B',3}
{'C015','Group C',5}
{'C016','Group D',7}
{'C003','Group A',2}
{'C002','Group B',4}
{'C015','Group C',6}
{'C016','Group D',8}
但我希望它是这样的:
{'C003','Group A',1}
我试图从父进程创建4个子进程,并让每个子进程执行不同的操作
int main(void) {
int processes = 4;
int i;
for (i = 1; i <= processes; i++) {
if (fork() == 0) {
printf("pid: %d\n", getpid());
exit(0);
}
}
int status;
for (i = 1; i <= processes; i++)
我有一个项目列表[1 2 3 4 5..],上面有一个函数进程(defn进程[conn I]..)
如何将此函数同时应用于列表的所有项,但同时限制进程数(例如,一次仅运行两个进程)。当所有进程完成时,我会收到通知,以便清理资源(关闭conn等)
谢谢,您可以使用内置的Java执行器:
(defn process [conn i]
(println (str "Thread " (.getName (Thread/currentThread)) " executing " i "\n")))
我正在实现一个在Rust中异步处理某种任务的系统。为了做到这一点,我使用的板条箱(0.2测试版)
处理这些任务之一需要临时但独占地使用特定类型的资源,其中系统中有固定数量的资源
请记住,这一切都发生在并发上下文中:多个线程可能试图同时处理一个任务。我一直在使用的界面的简化版本如下:
//系统持有固定数量的这些任务,而TaskFuture需要一个来完成。
发布结构资源;
发布结构系统{
//系统应该如何保存资源?
}
impl系统{
pub fn queue_task(&self,数据:TaskD
我遇到了一个我正试图理解的难题。我已经实现了一个在Wildfly服务器中运行的非常简单的REST服务示例。我有一个独立的多线程Java测试程序,它使用ApacheHTTP客户端库访问服务。客户端程序有两个独立的线程同时访问REST服务。当在服务器上运行测试程序而不建立httpSession时,服务器会并发处理请求(如服务器日志中所示)。如果线程是在建立httpSession之后运行的,则服务器将以顺序方式处理请求(如第二个服务器日志所示)。请注意,两个线程共享一个会话
这是故意的吗?我错过了什么
我在ejabberd中添加了一个自定义名称空间和xml数据包结构。
我如何扩展ejabberd来处理多个数据包(具有不同的名称空间)以在不同的队列上并行运行并将响应返回给客户端?
我记得在ejabberd中观察到“iqdisc”选项,但现在它已被删除。
我有没有办法做到这一点?我是不是还遗漏了什么
如有任何建议/建议,将不胜感激。
谢谢。据我在网上找到的,ejabberd遵循每个连接一个过程的习惯用法。没有直接配置选项,因此我必须手动从调用进程生成队列,然后将数据包路由回客户端
我非常好奇为java bean提供不变性的可能性(这里的bean指的是带有空构造函数的类,它为成员提供getter和setter)。显然,这些类不是一成不变的,它们用于从数据层传输值,这似乎是一个真正的问题
StackOverflow中提到了解决此问题的一种方法,称为“C#中的不可变对象模式”,其中对象在完全构建后被冻结。我有另一种方法,我真的很想听听人们的意见
该模式涉及两个类Immutable和Mutable,其中Mutable和Immutable都实现了一个接口,该接口提供了非变异bean
如何在多个GPU上实现基数排序–与在单个GPU上实现基数排序的方法相同,即先拆分数据,然后在单独的GPU上构建直方图,然后使用合并数据(如一堆卡片)?这种方法可以工作,但我认为这不是最快的方法。具体来说,合并每K位的直方图(K=4是目前最好的)需要在GPU 32/K=8之间交换密钥,以对32位整数进行排序。由于GPU之间的内存带宽(~5GB/s)远低于GPU上的内存带宽(~150GB/s),这将降低性能
更好的策略是将数据分成多个部分,在不同的GPU上对每个部分进行并行排序,然后在最后合并一次这
有一种静态检查互斥正确性的语言明智吗?即
var m
var x guarded_by(m)
func f1() {
lock(m)
x = 42
unlock(m)
}
func f2() {
x = 42 // error, accessing x w/o holding its mutex
}
func f3() assumes_locked(m) {
x = 42
}
func b1() {
f3() // error
}
func b2() {
我经常听说像facebook这样的网站有超过100000个并发数
我在谷歌上搜索了很多,发现有人解释这意味着同时向服务器发送100000个请求。但我想知道“同时”是什么意思?它是否要求发送到服务器的请求应在一秒钟内完成
谢谢当你同时做两件事时,这意味着什么?您必须在一秒钟内完成这些任务,或者您必须在完成第一个任务之前启动第二个任务?我的意思是服务器同时接受来自不同用户的请求,就像ab-Apache HTTP服务器基准测试工具的功能一样。此链接可能对您有所帮助。
有人能解释一下单元格数据类型的语法吗:
datatype 'a request = READ | WRITE of 'a
datatype 'a cell = CELL of {
reqCh : 'a request chan,
replyCh : 'a chan
}
我不确定你到底被什么弄糊涂了,但这应该可以解释一下这些类型
数据类型'a cell有一个构造函数cell,其参数是一个带有两个字段的记录:
reqCh,它是一个'a request chan,和replyCh,它是一个
我的程序遇到了一些问题
我有一个调用函数(Take_Job)的进程,该函数在一段时间(最小等待时间)过去之前应该保持阻塞状态。如果不是这样,将出现一条消息,通知这种情况
for Printer_Id in Type_Printer_Id loop
select
delay MINIMUM_WAIT
Pragma_Assert (True, "");
then abort
Take_Job (Controller,
我需要打开一个文件,读取该行,做一些事情,删除该行并保存,再次打开同一个文件,然后继续其余的操作
到目前为止,我有这个代码
1 -module(setup_data).
2 -export([for_each_line_in_file/1]).
3
4 for_each_line_in_file(Name) ->
5 {ok, Device} = file:open(Name, [read]),
6 for_each_line(Device).
基本上我有一个要调用的函数列表
'(f1 f2 f3 f4)
每个都是阻塞的,需要不同的时间返回
我想要一个惰性序列s,其中第一个元素是返回调用最快的结果,调用
(first s)
将只阻塞该呼叫的响应时间。其他元素也是如此
具体例子:如果
f1需要10秒
f2需要5秒
f3需要1秒
f4需要2秒
然后打电话
(first s)
将阻塞1s并返回(f3)的结果
将阻塞2s并返回(f3)和(f4)等的结果
我曾考虑将所有功能包装在futures中,并将结果交付给promises。
但我不
首先,如果这是一个愚蠢的问题,请原谅我。
我想创建一个通用的同步列表(如Java),以便在我的Go项目中重用。
我找到了Go的源代码,我想知道仅仅向列表操作函数添加互斥锁是否足够?如果要创建一个并发安全容器,您需要保护对数据的所有访问,而不仅仅是写入。检查元素,甚至在不同步读取的情况下调用Len(),都可能返回无效或损坏的数据
使用互斥锁保护整个数据结构可能比实现自己的并发链表更容易 像这样的线程()表明线程安全列表的预期用途很重要,可以帮助从各种同步方法中进行选择?除了静态大小外,它只是一个同
这个链接讨论如何处理sagas的并发性。但是,它没有显示一个示例来解释何时可以发生并发。在电子商务应用程序中,订单是每个用户的,因此不存在多个用户更新同一订单的情况。我没有看到订单系统和发货系统更新同一个订单的案例(订单传奇)。它们发生在不同的时间
除非开发人员编写代码以同时由多个代理更新同一顺序,否则并发问题是否会出现?了解哪种场景并发检查与此相关的关键在于:
如果您的端点与多个工作线程一起运行,则这是可能的
多条消息将同时命中同一个saga实例
假设您有多个线程处理相同的传入消息,这在设计为
许多Prolog系统都有一个freeze/2谓词,一个谓词
那可能应该有名字geler/2,因为它是
甚至是在Prolog II之前发明的
假设我对同一个变量有一个条件,但有两个
不同的目标,即:
?- freeze(X, G1), freeze(X, G2), X=1.
首选的唤醒策略是什么,G1是否首先执行
还是先执行G2?如果G1和G2产生了新的
冻结,也会被唤醒:
G1 :- freeze(Y, G3), Y=1.
G2 :- freeze(Z, G4), Z=1.
G3或G
根据铁锈手册,以下代码可能导致关闭可能超过当前功能错误:
use std::thread;
fn main() {
let x = 1;
thread::spawn(|| {
println!("x is {}", x);
});
}
思考闭包何时以及如何超过当前函数的发生是抽象的;你能提供一些例子或说明吗 由于您将闭包移动到线程中,并且线程可能比当前函数寿命长(它们不会自动连接到函数端,请使用横梁板条箱来实现此类功能),因此这与在堆上移动它是一样的
我正在学习并发性,希望澄清我对以下内容的理解。如果我错了,请纠正我
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;
fn main() {
let data = Arc::new(Mutex::new(vec![1, 2, 3]));
for i in 0..3 {
let data = data.clone();
thread::spawn(move
我正在启动数百个并发的httpkit.client/get请求,并提供了一个回调,用于将结果写入单个文件
处理线程安全性的好方法是什么?使用chan和来自core.asyc
这是我要考虑的代码:
(defn launch-async [channel url]
从操作系统概念
5.8.2使用监视器的解决方案
接下来,我们通过介绍无死锁的监视器来说明监视器的概念
解决问题的方法。这一解决方案规定了
限制哲学家只能在两种情况下拿起筷子
其中一个是可用的。要编写此解决方案,我们需要区分
在三个州中,我们可以找到一位哲学家。为此
目的:我们介绍以下数据结构:
enum {THINKING, HUNGRY, EATING} state[5];
哲学家只有当她有两个
邻居没有吃饭:(州[(i+4)%5]!=吃饭)和
(声明[(i+1)%5]!=吃)
我们还需要申
假设一个应用程序有3个线程,T1、T2和T3,所有线程都在同一时间启动。它们都从某个表、行和列中读取相同的值。假设这个值是50
1.T1很快。在100毫秒内完成。完成后,它将用+5更新读取的值。因此,它在数据库中写入55
2.T2稍微慢一点。在700毫秒内完成。完成后,它会将读取的值加上+10。因此,它用60更新数据
3.T3甚至更慢,在1300ms内完成。完成后,此线程将增加+15。因此,该值变为65
我希望从中学习的解决方案是如何处理这种情况下的数据一致性。因为,很明显,在T3结束时,该值应
我正在使用具有以下值的并发线程组
目标并发:200,
启动时间:5分钟,
爬坡步数:10,
保持目标速率时间:0分钟,
线程迭代限制:1。
我使用吞吐量控制器作为并发线程组的子线程,总执行数,吞吐量=1,每个用户选择
我是5个HTTP请求,我期望每个HTTP请求应该有200个用户,但它显示了300多个用户
谁能告诉我,我的期望是错误的,或者我的设置是错误的
最好的方法是什么?你的期望是错误的。关于你的设置-我们不知道你想要实现什么
并发线程组维护定义的并发
JMeter将从20个用户开始
在
更新:此问题包含一个错误,使基准变得毫无意义。我将尝试一个更好的基准测试,比较F#和Erlang的基本并发功能,并在另一个问题中询问结果
我试图了解Erlang和F#的性能特征。我发现Erlang的并发模型非常吸引人,但出于互操作性的原因,我倾向于使用F。虽然开箱即用的F#没有提供任何类似于Erlang的并发原语的东西——据我所知,async和MailboxProcessor只涵盖了Erlang所擅长的一小部分——但我一直在努力理解F#在性能方面可能实现的功能
在Joe Armstrong的编程
有多个线程可以安全地对并发返回的实例调用方法吗?我遇到了这个问题,所以我想看一下源代码。假设您使用的是Quartz的标准配置(将作业和触发器存储在RAM中而不是持久作业存储中),那么Quartz似乎是线程安全的
深入到源代码中,您将最终到达RamJobStore,它将所有作业和触发器存储在内存中
public void storeJobAndTrigger(SchedulingContext ctxt, JobDetail newJob,
Trigger newTrigger)
我正在编写一个计算引擎(作为Akka Actors实现),它将使用一些异步和并发Actor来执行一些数据检索以及计算的某些部分
当主参与者收到启动计算的消息时,它必须在执行计算之前从数据库中检索三条不同的数据。为了进行数据检索,我准备了3个参与者,每个参与者负责一次数据检索
在进入下一步之前,我需要所有三个数据集。然而,由于它们是异步并发检索的,所以我无法知道将首先返回哪一个
我的第一反应是在我的主要参与者中为每个进程维护一个标志(布尔值)。当每个子参与者发回数据集时,我的主参与者中的相应标志被
从K20开始,不同的流完全并发(过去在边缘上是并发的)
然而,我的程序需要旧的方式。或者我需要做大量的同步来解决依赖性问题
是否可以将流管理切换到旧方式?CUDA C编程指南的
流是一系列命令(可能由不同的主机发出)
线程)按顺序执行。另一方面,不同的溪流,
可能会执行彼此之间的命令,或
同时这种行为不能保证,因此不应该保证
依赖于正确性(例如,内核间通信
未定义)
如果应用程序依赖于streams的Compute Capability 2.*和3.0实现,则该程序违反了streams的定义,对
大家好,有几个关于多内核Cuda流处理的问题。
假设3.5版开普勒设备中的s流和a内核,其中内核之间的s并发性取决于许多因素,但许多人忽略的一个因素只是内核的大小(即网格中的块数)能够有效利用GPU的内核通常不会在很大程度上同时运行,即使它们能够同时运行,也不会有多少吞吐量优势。GPU内的工作分配器通常会在内核启动后立即开始分配块,因此如果一个内核先启动另一个内核,并且两个内核都有大量块,那么第一个内核通常会占用GPU,直到它几乎完成,在这一点上,第二个内核的块将被调度和执行,可能会有少量的“并
我希望输出会混淆(因为没有更好的词),但相反;示例输出为:
$go运行并行程序
开始围棋程序
等待完成
a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 10 11 12 14 16 19 20 22 24 26
终止程序
我错过了什么
谢谢,你什么都不缺。它起作用了。这些调用没有“交错”(混合)出现,不是因为它们没有被并行化,而是因为它们发生得非常快
您可以轻松地添加一些对time.Sleep的调用,以更
我正在使用EJB容器(Glassfish 4.0)运行我的web应用程序,它将使用线程池中的一个线程来处理来自客户端的每个请求。在运行一段时间后,许多线程似乎被阻塞。我使用jstack获得了以下信息:
"default-http(6)" daemon prio=10 tid=0x00007f2c9c009000 nid=0x6cb9 waiting on condition [0x00007f2fd53fb000]
java.lang.Thread.State: WAITING (park
我有以下任务规范:
使用Ada.Real\u Time;使用Ada.Real_Time;
包打包任务已完成
任务类型任务\u t为
activationTime:常量整数:=1;
周期:常数整数:=2;
计算时间:常数整数:=1;
启动时间:时间;
结束任务;
结束pkg_任务;
编译时,我在任务规范中声明变量的所有行中都得到了标题上提到的错误,我不知道问题出在哪里。任务的接口是它的条目,因此只能在任务规范中声明条目。任务中的任何局部变量都在任务体的声明性部分声明
没有任何条目的任务只需声明:
记录器错误:
消费者未能在60000毫秒内启动;任务执行者
是否有足够的线程支持容器并发
我如何解决它
非常感谢
我尝试如下更改我的配置:
@配置
公共类RabbitMQConfig{
private final SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory;
private final RabbitTemplate mqTemplate;
@Autowired
public RabbitM
上一页 1 2 ...
5 6 7 8 9 10 11 ...
下一页 最后一页 共 34 页