标签: blocking

哪些情况会导致东京内阁封锁

tc在 python 中使用带有模块的东京柜。我以 TDB 格式存储我的数据。我希望该表仅在写入期间阻塞。不幸的是,我看到当文件以“编写器模式”打开时,其他进程无法从中读取。这是标准行为,包装问题,还是我做错了什么?或者可能还有其他情况下操作被阻塞?

python blocking tokyo-cabinet

2
推荐指数
1
解决办法
605
查看次数

SQL Server 2005 睡眠 SPID 阻塞另一个 SPID

我发现我的 SQL Server 数据库有许多休眠进程,看起来这些休眠 SPID 之一正在阻塞另一个进程,并且该进程也被挂起...

有人可以解释一下这一点吗...

1.) 睡眠进程如何阻塞另一个进程?2.) 我看到很多睡眠进程...这正常吗?

谢谢

sql sql-server blocking

2
推荐指数
1
解决办法
6804
查看次数

C# 阻塞等待响应

我多次偶然发现这个问题,主要是通过 hacks 解决它,但希望看到一种“正确”的方法来做到这一点。

我正在编写一个通信协议,与 RPC 非常相似,我的端点提出“查询”,他们收到“回复”。

现在...我想实现一个名为 SendCommand 的函数,它会发出一个查询,等待对该问题的回复,然后返回它。

所以我可以做类似的事情

int outside_temp = SendCommand(What is the temperature outside).ToInt();
Run Code Online (Sandbox Code Playgroud)

这样做的问题是消息是异步发送和接收的,事件通知我新消息已经到达,以及它是什么。我需要阻塞线程,直到对提到的查询的回复到达,提取其数据内容,并将其返回给调用者。

我的问题是阻塞线程。阻塞线程不是问题,我们谈论的是多线程应用程序,因此 UI 不会冻结等,但问题是实现此目的的正确方法是什么?

我正在考虑在 SendCommand 函数中初始化一个信号量,等待它,并在消息接收到的事件处理程序中释放信号量(在检查它是正确的消息之后)?

问候, axos88

.net c# events multithreading blocking

2
推荐指数
1
解决办法
7529
查看次数

C# - 具有单个消费者线程的多个生产者线程

目前正在处理一个 C# 项目 - 我正在尝试做的一般想法是......

用户有一个或多个带有他们感兴趣的交易品种的投资组合,每个投资组合将交易品种的数据下载到 csv,解析它,然后对数据运行一组规则,根据这些规则的结果生成警报。每当经过设定的时间间隔时下载数据等

我计划让每个投资组合在它自己的线程上运行,这样当间隔过去时,每个投资组合可以继续下载数据,同时解析和运行规则,而不是一个一个。然后应将警报推送到包含警报队列的另一个线程 (!)。当它收到警报时,它会将它们发送给客户端。

有点多但是用 C# 解决这个问题的最好方法是什么 - 使用线程,或者像后台工作程序这样的东西,只是让警报队列在一个单独的线程上运行?

非常感谢您的任何建议,其中一些内容是新手,所以如果我完全错了,请随时告诉我:)

c# multithreading producer-consumer thread-safety blocking

2
推荐指数
1
解决办法
1106
查看次数

了解多个线程和EventWaitHandle

我试图在网上找到这个代码段:

private EventWaitHandle wh = new AutoResetEvent();

private void WorkerThread() 
{
    while(true) 
    {
        wh.WaitOne();
        //Do work.
    }
}

public void StartWorking()
{
    wh.Set();
}
Run Code Online (Sandbox Code Playgroud)

所以我理解线程一旦命中WaitOne()它将阻塞直到调用Set(),但是如果多个线程到达.WaitOne()会怎么样?他们都会被封锁还是只有一个?如果调用Set(),它会释放所有线程还是只释放一个?

编辑 - 我正在阅读更多并尝试它和一个后续问题:如果ManualResetEvent完成了我上面描述的内容,当有多个线程同时等待时它的行为如何?只有一个Set()调用,AutoResetEvent会一次释放一个吗?

c# multithreading locking blocking

2
推荐指数
1
解决办法
489
查看次数

诊断进程陷入D状态(不间断睡眠/阻塞IO)

我们正在开发一个嵌入式Linux系统,使用Live555 WIS-Streamer通过网络在RTSP上传输视频.

在一个特定的系统中,我们看到WIS-Streamer卡在TASK_UNINTERRUPTIBLE状态; 从命令行:ps进程的状态显示为DW,WIS进程的子进程都列为Zombie状态.

一旦我们处于这种状态,看起来我们无能为力,除了重启(不可取).但是,我们真的很想找到这个的根本原因 - 我怀疑在流send媒体中它挂在一个阻塞的电话或者某些东西上.有什么我们可以做的,无论是在代码中还是通过命令行等来尝试缩小被阻止的内容?

作为一个例子,我已经尝试查看netstat(netstat -alp)的输出,看看是否有悬挂套接字附加到被阻塞/僵尸线程的PID,但无济于事.

更新更多信息:

它不会破坏CPU,top将阻塞和僵尸线程列为0%mem/0%CPU/VSZ 0.

我尝试过关于系统的其他事情:

/ proc/status/for main&child threads 546是父级,被阻止:

$> cat /proc/546/stat    
Name:   wis-streamer
State:  D (disk sleep)
Tgid:   546
Pid:    546
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 0
Groups: 
Threads:        1
SigQ:   17/353
SigPnd: 0000000000000000
ShdPnd: 0000000000004102
SigBlk: 0000000000000000
SigIgn: 0000000000001004
SigCgt: 0000000180006a02
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff …
Run Code Online (Sandbox Code Playgroud)

c networking blocking

2
推荐指数
1
解决办法
3416
查看次数

阻止RxJava映射内部无法完成

以下(使用RxJava 1.2.4的错误方法)代码无法解除阻塞并且永远不会完成.

Scheduler scheduler = Schedulers.computation();
Observable.range(0, 100).map(i -> {
    System.out.println("onNext " + i);
    return Observable.just(i).subscribeOn(scheduler).toBlocking().single();
}).subscribeOn(scheduler).toBlocking().subscribe();
System.out.println("finished");
Run Code Online (Sandbox Code Playgroud)

如果将第一行更改为固定的线程池,则完成.

Scheduler scheduler = Schedulers.from(Executors.newFixedThreadPool(8));
Run Code Online (Sandbox Code Playgroud)

计算调度程序有什么特别之处,使第一个例子不起作用?

deadlock blocking rx-java

2
推荐指数
1
解决办法
828
查看次数

阻塞、挂起和睡眠有什么区别

例如,一个进程正在以阻塞模式侦听某个端口,因此如果 I/O 未准备好,该进程将被阻塞。

while (true)
{
    msg = recv(port, BLOCKING_FLAG); // blocks here
    cout<<msg<<endl;
}
Run Code Online (Sandbox Code Playgroud)

我们也知道我们可以让一个进程休眠: sleep(1000)

我的问题是:如果这样的进程是阻塞的,我可以说该进程被挂起吗?该进程是否会从 CPU 中换出?相同的问题sleep

multithreading sleep process suspend blocking

2
推荐指数
1
解决办法
3150
查看次数

如何在 Reactor 中进行多线程文件处理

我正在尝试使用 Reactor 的 Flux 并行处理多个文件。主要工作量发生在调用中flatMap,然后 Flux 被转换和过滤。

每当我尝试订阅生成的 Flux 时,主线程都会在我收到任何值之前退出。

Flux.fromStream(Files.list(Paths.get("directory"))
    .flatMap(path -> { 
        return Flux.create(sink -> {
            try (
                RandomAccessFile file = new RandomAccessFile(new File(path), "r");
                FileChannel fileChannel = file.getChannel()
            ) {
                // Process file into tokens
                sink.next(new Token(".."));
            } catch (IOException e) {
                sink.error(e);
            } finally {
                sink.complete();
            }
        }).subscribeOn(Schedulers.boundedElastic());
    })
    .map(token -> /* Transform tokens */)
    .filter(token -> /* Filter tokens*/)
    .subscribe(token -> /* Store tokens in list */)

Run Code Online (Sandbox Code Playgroud)

我希望在我的列表中找到处理管道的输出,但程序立即退出。首先,我想知道我是否正确使用了 Flux 类,其次我将如何等待订阅调用完成?

java blocking project-reactor

2
推荐指数
1
解决办法
1081
查看次数

如何检查Go通道是否真的在等待数据?

我只想在某个通道阻塞等待数据到来时继续执行(阻塞通道是工作例程的一部分,应该并行运行)。

喜欢:

func foo(c chan bool) {

    go start_blocking(c)
    
    // only come here, when channel c actually blocks!
}

func start_blocking(c chan bool) {

    <-c
}
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?

目的:

通道正在等待稍后的数据到来,并且在主执行继续之前它应该在后台准备好。

channel go blocking

2
推荐指数
1
解决办法
4009
查看次数