标签: blocking

从 Java 发起的 DB 查询是否总是阻塞 I/O?

假设一些阻塞 I/O 是用 Java 完成的,例如长时间运行的数据库查询。Java 中是否有一种方法可以让某些 Java 数据库驱动程序告诉 JVM 调度程序该调用已离开 JVM,现在正在由某个外部系统处理?然后,JVM 可以将为数据库查询提供服务的线程分配给其他操作,直到数据库的回复到达。这样,阻塞数据库查询将有效地变为非阻塞。

只是想知道这是否可以在一般的 JVM 上完成。我从事 Java 工作很多年了,但我承认我不知道 Java 调度程序在这种情况下在做什么。

java multithreading scheduling blocking

6
推荐指数
1
解决办法
1708
查看次数

如何避免 tcdrain() 永远阻塞

每当我需要发送消息时,我都会从线程调用这个函数 _write_port() 。为了确保写入整个消息,使用 tcdrain()。

void Serial_Port::_write_port(char *buf, unsigned &len)
{

    // Lock
    pthread_mutex_lock(&lock);

    // Write packet via serial link
    write(fd, buf, len);

    // Wait until all data has been written
    tcdrain(fd);

    // Unlock
    pthread_mutex_unlock(&lock);

    return;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是 tcdrain() 在执行随机次数的函数 _write_port() 后永远阻塞。这将阻塞锁,导致阻塞我的其他读取线程,从而阻塞所有内容。

避免 tcdrain 永远阻塞的好方法是什么?


注意:我奇怪地注意到,如果我在整个函数中使用多个 printf(),tcdrain 永远不会阻塞。printf() 和 write() 之间存在关系对我来说没有任何意义,因为它们写入不同的输出文件。由于我无法解释这种行为,我认为它在我的实验中如此工作可能是巧合。如果有人可以解释这种行为,请告诉我。

c++ io serial-port nonblocking blocking

6
推荐指数
0
解决办法
1135
查看次数

SQL Server请求超时,因为TempGetStateItemExclusive被连续调用

我运行的网站流量不错(每天约有100,000次页面浏览量),但由于SQL Server超时错误,偶尔使该网站瘫痪。

当我运行SQL事件探查器时,我看到一条命令每秒被调用数百次,如下所示:

...
exec dbo.TempGetStateItemExclusive3 @id=N'ilooyuja4bnzodienj3idpni4ed2081b',...
...
Run Code Online (Sandbox Code Playgroud)

我们使用SQL Server来存储ASP.NET会话状态。上面是存储过程,用于获取给定会话的会话状态。它似乎在循环,一遍又一遍地请求相同的2或3个会话。

我发现了一个有前途的修补程序,似乎可以解决此确切问题,但似乎并没有为我们解决问题。(我假设此修补程序包含在最新的.NET Service Pack中,因为它看起来不再可以直接安装了)。我手动添加了注册表项,但是我们仍然看到像上面那样的循环存储过程调用(比每500ms频繁地请求相同的会话)

我无法在开发计算机上重新创建它。当对相同的会话ID发出两个请求时,它似乎可以正确阻止,甚至尝试命中SQL,直到第一页释放该会话。

有任何想法吗?先感谢您!!!

sql-server asp.net session blocking

5
推荐指数
1
解决办法
4162
查看次数

将NIO与IO混合

通常,您有一个绑定的tcp端口,并在这些端口上有多个连接。至少通常有更多的连接作为绑定端口。我的情况有所不同:我想绑定许多端口,并且通常没有(或至少很少有)连接。

所以我想使用NIO接受传入的连接。

但是,我需要将接受的连接传递给现有的jsch ssh库。这需要IO套接字而不是NIO套接字,它会为每个连接生成一个(或两个)线程。但这对我很好。

现在,我认为以下几行将提供相同的结果:

Socket a = serverSocketChannel.accept().socket();
Socket b = serverSocketChannel.socket().accept();
SocketChannel channel = serverSocketChannel.accept();
channel.configureBlocking( true );
Socket c = channel.socket();
Socket d = serverSocket.accept();
Run Code Online (Sandbox Code Playgroud)

但是,返回的套接字的getInputStream()getOutputStream()功能似乎不同。仅当使用上一次调用接受套接字时,jsch才能使用它。在前三个案例中,它失败了(很抱歉:我不知道为什么)。

那么有没有办法转换这样的套接字?

java io nio blocking

5
推荐指数
1
解决办法
1415
查看次数

在C的pthread中优雅地杀死一个阻塞线程?

假设我有一个类似这样的话题:

void my_thread(char *device_name) {
    int fd = open(device_name, O_RDONLY);
    struct input_event ev;

    while(1) {
        read(fd, &ev, sizeof(struct input_event));
        /* do something */
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么停止这样的线程?一种方法是使用pthread_cancel,但我宁愿更优雅地做.还是喜欢pthread_kill什么?但是,在这种情况下,read方法是否会阻塞(正如我所假设的那样)以及线程如何处理信号?或者是应该处理它的过程?

我非常感谢你的建议!

c multithreading pthreads blocking

5
推荐指数
2
解决办法
6963
查看次数

套接字关闭后c ++ linux accept()阻塞

我有一个侦听新连接的线程

new_fd = accept(Listen_fd, (struct sockaddr *) & their_addr, &sin_size);
Run Code Online (Sandbox Code Playgroud)

和另一个在关闭程序时关闭Listen_fd的线程.然而,在Listen_fd关闭后,它仍然会阻塞.当我使用GDB尝试和调试时,accept()不会阻塞.我认为这可能是SO_LINGER的问题,但默认情况下它不应该打开,并且在使用GDB时不应该更改.有什么想法,或关闭列表套接字的任何其他建议?

c++ sockets linux blocking

5
推荐指数
3
解决办法
9182
查看次数

如何在iOS应用程序中诊断阻止?

所以,我有一个很好的iOS应用程序 - 通常,除了偶尔阻止UI.有没有标准的技术来诊断零星无响应的用户界面?

在我的例子中,我有LRResty异步拉取数据,结果数据由NSXMLParser解析为一些NSMutableArray对象.

我将其固定在XML解析上,但UI不会一致地阻塞.它主要在点击我的UINavigationBar上的后退按钮后阻塞,但是在搜索栏与之交互之前,初始表格视图也不会滚动.可能有解析器仍在工作,或者请求仍在工作?

performance user-interface user-experience blocking ios

5
推荐指数
1
解决办法
626
查看次数

以编程方式检查网站重定向

在我的国家,许多网站都会受到审查和阻止,而是被重定向到某个页面.我不知道他们是怎么做的.但是,如果不加载整个网站,是否可以以编程方式确定网站是否被阻止或未被阻止?我想这样做的原因是使用网络搜索API(可能是谷歌)并制作一个只带来未被阻止的结果的网络服务.

如果有帮助,加载的页面内容就像这样:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1256"><title>M3-5
</title></head><body><iframe src="http://10.10.34.34?type=Invalid Site&policy=MainPolicy " style="width: 100%; height: 100%" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" vspace="0" hspace="0"></iframe></body></html>
Run Code Online (Sandbox Code Playgroud)

我知道运行该服务的服务器必须拥有我国家的IP.

如果有一种方法可以在PHP或Python中执行此操作,那将是最好的.

我感谢任何帮助或想法.

php python redirect blocking web

5
推荐指数
1
解决办法
734
查看次数

在MPI中对cout进行"原子"调用

我感兴趣的是OpenMPI中是否有命令或技术要进行原子调用以写入stdout(或者就此而言,任何流).

我注意到的是,在执行MPI程序期间,写入cout(或其他流)的调用可能会变得混乱,因为每当proc到达某段代码时,每个proc都可以写入.报告结果时,可以通过多个过程写入一行,这会使问题混乱.所以2个不同的过程可能会做这样的事情:

//Proc 10 - results calculated somewhere above
//  result1 = 10
//  result2 = 11
cout << "My results are: " << result1 << " " << resul2 << endl;
Run Code Online (Sandbox Code Playgroud)

和:

//Proc 20 - results calculated somewhere above
//  result1 = 20
//  result2 = 21
cout << "My results are: " << result1 << " " << resul2 << endl;
Run Code Online (Sandbox Code Playgroud)

但结果可能是:

My results are: 20 My results are: 10 11 21
Run Code Online (Sandbox Code Playgroud)

我正在寻找的东西就像"阻塞"或原子cout(以及可能写入其他流,如文件流).因此,一旦我开始编写一个cout,它就会阻塞直到语句结束,或者直到endl或者刷新流发出.如果是这种情况,我会保证两条线是分开的(当然,我仍然不知道哪条线会先出现):

My results are: 20 21 …
Run Code Online (Sandbox Code Playgroud)

c++ cout atomic blocking openmpi

5
推荐指数
1
解决办法
2120
查看次数

无响应的actor系统:ThreadPoolExecutor调度程序只创建核心线程池,显然忽略了最大线程池大小

更新:如果我将ThreadPoolExecutor's核心池大小设置为与最大池大小(29个线程)相同,我发现我的程序仍然响应.但是,如果我将核心池大小设置为11并将最大池大小设置为29,那么actor系统只会创建11个线程.如何配置ActorSystem/ ThreadPoolExecutor继续创建线程以超过核心线程数并保持在最大线程数内?我宁愿不将核心线程数设置为最大线程数,因为我只需要额外的线程来取消作业(这应该是一个罕见的事件).


我有一个针对Oracle数据库运行的批处理程序,使用Java/Akka类型的actor与以下actor进行实现:

  1. BatchManager负责与REST控制器通信.它管理一些Queue未初始化的批处理作业; 当从队列中轮询未初始化的批处理作业时,它将变为一个JobManageractor并执行.
  2. JobManager维护一个存储过程队列和一个池Workers; 它Worker使用存储过程初始化每个,并在Worker完成后将过程的结果发送给JobManager,JobManager并将另一个存储过程发送给Worker.当作业队列为空且全部Workers空闲时,批处理终止,此时将JobManager结果报告给BatchManager,关闭其工作人员(通过TypedActor.context().stop()),然后自行关闭.该JobManager有一个Promise<Status> completion在作业成功完成,否则当作业由于取消或致命异常终止调查结束.
  3. Worker执行存储过程.它创建OracleConnection和用于执行存储过程的CallableStatementonFailure,JobManager.completion并向abort连接和cancel语句注册回调.此回调不使用actor系统的执行上下文,而是使用从创建的高速缓存执行程序服务创建的执行上下文BatchManager.

我的配置是

{"akka" : { "actor" : { "default-dispatcher" : {
    "type" : "Dispatcher",
    "executor" : "default-executor",
    "throughput" : "1",
    "default-executor" : { …
Run Code Online (Sandbox Code Playgroud)

java multithreading scala blocking akka

5
推荐指数
1
解决办法
1050
查看次数