标签: blocking

Parallel.ForEach 在长迭代中被阻塞

我一直在Parallel.ForEach对项目集合进行一些耗时的处理。该处理实际上是由外部命令行工具处理的,我无法更改它。然而,似乎Parallel.ForEach会“卡在”集合中长期运行的项目上。我已经将问题提炼出来,并且可以表明Parallel.ForEach,事实上,等待这个漫长的过程完成并且不允许任何其他人通过。我编写了一个控制台应用程序来演示该问题:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testParallel
{
    class Program
    {
        static int inloop = 0;
        static int completed = 0;
        static void Main(string[] args)
        {
            // initialize an array integers to hold the wait duration (in milliseconds)
            var items = Enumerable.Repeat(10, 1000).ToArray();
            
            // set one of the items to 10 seconds
            items[50] = 10000;


            // Initialize our line for reporting status
            Console.Write(0.ToString("000") + " Threads, " + …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing blocking task-parallel-library parallel.foreach

4
推荐指数
1
解决办法
2917
查看次数

如何使用 Kotlin 协程正确进行阻塞服务调用?

我正在处理一个 http 库(特别是用于进行 graphql 调用的库),它的 API 仅提供阻塞调用,并且是用 Java 编写的。

现在,我正在使用 Kotlin 并使用协程库编写应用程序,这让我想知道应该如何使用协程进行阻塞网络调用。

所以我得到了这段代码:

class DataService(val client: Client) {
    suspend fun getData(request: Request) {
        // process request

        client.makeServiceCall(...)

        //deal with response
    }
}

class Client() {
    suspend fun makeServiceCall(...) {
        library.query(....) //make a network call using the above mentioned library
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否Client.makeServiceCall()应该实际标记为挂起函数,因为它实际上并不挂起,它仅在进行网络调用时才阻塞。DataService.getData()我应该如何从到进行调用makeServiceCall()并仍然遵守结构化并发原则(例如父子协程关系)?

nonblocking blocking coroutine kotlin kotlin-coroutines

4
推荐指数
1
解决办法
6295
查看次数

一个SELECT如何阻止另一个?

我正在查看SQL Server 2005 上SP_WhoIsActive的输出,它告诉我一个会话阻止了另一个会话-很好。但是,它们都在运行SELECT。一个SELECT如何阻止另一个?他们俩不应该都获得共享锁(彼此兼容)吗?

更多详细信息:这两个会话都没有开放的事务计数-因此它们是独立的。

查询将视图与表连接在一起。

它们是复杂的查询,它们连接许多表并导致10,000次左右的读取。

任何见解非常感谢。

t-sql sql-server concurrency blocking

3
推荐指数
1
解决办法
3805
查看次数

在C#中的单独线程上停止异步TCP服务器

我已经实现了由另一个进程生成的异步TCP服务器.它开始正常并按预期运行,但是当我结束启动它的进程时,我无法终止服务器.

以下是我当前的TCP服务器和其他进程的停止功能.

TCP服务器

    public class StateObject
    {
        //Client socket.
        public Socket workSocket = null;
        //Size of receive buffer.
        public const int BufferSize = 1024;
        //Receive buffer.
        public byte[] buffer = new byte[BufferSize];
        //Received data string.
        public StringBuilder sb = new StringBuilder();
    }

    public class AsynchronousSocketListener : Strategy
    {
        //Thread signal.
        public static ManualResetEvent allDone = new ManualResetEvent(false);
        public volatile bool listening = true;

        //User-specified port number.
        private int Port;

        public AsynchronousSocketListener(int port)
        {
            Port = port;
        }

        public void StopListening() …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous tcp blocking

3
推荐指数
1
解决办法
4228
查看次数

有没有办法使StringIO读取阻塞

我搜索了文档并搜索过,但没有任何关于阻止StringIO对象的说法.

我可以创建自己的文件类对象,只是简单地包装StringIO但是如何阻止它?我知道的唯一方法是使用while循环和time.sleep(0.1)直到有可用的数据.

python blocking stringio

3
推荐指数
1
解决办法
943
查看次数

阻止代码并等待事件处理程序触发?

我正在编写一个使用第三方库来处理某些数据的应用程序.在一个非常简单的例子中,我有一个像这样的任务运行的方法:

private void ProcessListOfItems(List<string> items)
{ 
    while (items.Count > 0)
    {
        3rdPartyLibObject.Process(items[0]);
        items.Remove(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的代码当前的编写方式,我会在Process()方法返回后立即从列表中删除每个项目.但是项目的处理可能会失败,我需要知道是否会发生这种情况.不幸的是,Process()方法不返回bool值来指示项目是否成功处理,而是触发ProcessingComplete和ProcessingFailed事件.我有事件处理程序连接到这样的事件:

3rdPartyLibObject.ProcessingComplete += obj_ProcessingSuccess;
3rdPartyLibObject.ProcessingFailed += obj_ProcessingFailed;

private void obj_ProcessingSuccess(object sender, 3rdPartyLibObject.ProcessingEventArgs e)
{
    this.Invoke(new ProcessedHandler(OnProcessed), new object[] { true });
}

private void obj_ProcessingFailed(object sender, 3rdPartyLibObject.ProcessingEventArgs e)
{
    this.Invoke(new ProcessedHandler(OnProcessed), new object[] { false });
}

private void OnProcessed(bool success)
{
    if (success)
    {
        Debug.WriteLine("Item was processed succesfully!");
    }
    else
    {
        Debug.WriteLine("Failed to process item!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在调用3rdPartyLibObject.Process()之后立即使用我的代码块,直到其中一个事件处理程序触发,因此我知道该项是否未能处理(以及是否应将其从列表与否).我猜这可能不是一个不寻常的情况,但我以前从未遇到过这种情况.是否有一个普遍认同的最佳做法来处理这种情况?

.net c# events event-handling blocking

3
推荐指数
1
解决办法
5618
查看次数

为什么我的服务的AsyncTask阻止来自主Activity的AsyncTasks?

我正在尝试编写一个简单的服务,每隔几秒就会做一些事情.但是当我在主Activity中尝试运行其他AsyncTasks时运行服务时,我注意到其他AsyncTasks卡在onPreExecute上.当我禁用该服务时,一切都按预期工作.Service的AsynTask是否阻止了其他AsyncTasks?

服务

public class SVC_SyncData extends Service {

    private final String TAG = "SVC_SyncData";

    private AT_SyncData m_SyncPoll = null;

    public static boolean isRunning = false;

    public SVC_SyncData() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate");
        m_SyncPoll = new AT_SyncData(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand");
        m_SyncPoll.execute();
        isRunning = true;
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy");
        m_SyncPoll.cancel(false);
        isRunning …
Run Code Online (Sandbox Code Playgroud)

java multithreading android blocking

3
推荐指数
1
解决办法
1588
查看次数

Django网络服务器阻塞的主要原因是什么?

为什么Django网络服务器会阻塞,而不是像Tornado那样无阻塞?是否有理由以这种方式设计网络服务器?

python django webserver tornado blocking

3
推荐指数
2
解决办法
159
查看次数

如何中断BlockingQueue?

BlockingQueue.put可以抛出InterruptedException.如何通过抛出此异常导致队列中断?

ArrayBlockingQueue<Param> queue = new ArrayBlockingQueue<Param>(NUMBER_OF_MEMBERS);
...
try {
    queue.put(param);
} catch (InterruptedException e) {
    Log.w(TAG, "put Interrupted", e);
}
...
// how can I queue.notify?
Run Code Online (Sandbox Code Playgroud)

java concurrency android interrupt blocking

3
推荐指数
1
解决办法
3962
查看次数

Redis INCR并发

我正在使用Redis' INCR为对象生成ID.然后使用ZADDID作为键添加对象.

我是否需要担心是否有多个连接执行同一个代码块?说后id:12,如果两个连接在同一时间连接,并添加都使用对象id:13,然后其中一人将失去.

concurrency block blocking redis

3
推荐指数
2
解决办法
1325
查看次数