jjzjj

coroutine

全部标签

go - 并行获取多个字段的模式

我需要从外部服务为我的系统并行获取多个字段(在此示例中,通过Name()、Age()和CanDrive()方法模拟)。fetchUser()方法可以满足我的要求,但它似乎过于冗长,特别是如果您认为我可以有10个以上的字段。有没有更好的方法可以实现这一点?Playground:https://play.golang.org/p/90sNq1GmrD8代码(与playground中的相同):packagemainimport("fmt""sync")typeUserstruct{NamestringAgeintCanDrive*bool}funcName()(string,error){r

go - 如何使用 WaitGroup 处理工作池中的错误?

我在使用sync.WaitGroup和select时遇到问题。如果您查看以下http请求池,您会注意到如果发生错误,它将永远不会被报告为wg.Done()将阻塞并且不再从channel读取。packagepoolimport("fmt""log""net/http""sync")var(MaxPoolQueue=100MaxPoolWorker=10)typePoolstruct{wg*sync.WaitGroupqueuechan*http.Requesterrorschanerror}funcNewPool()*Pool{return&Pool{wg:&sync.WaitGroup

go - 如何使用 WaitGroup 处理工作池中的错误?

我在使用sync.WaitGroup和select时遇到问题。如果您查看以下http请求池,您会注意到如果发生错误,它将永远不会被报告为wg.Done()将阻塞并且不再从channel读取。packagepoolimport("fmt""log""net/http""sync")var(MaxPoolQueue=100MaxPoolWorker=10)typePoolstruct{wg*sync.WaitGroupqueuechan*http.Requesterrorschanerror}funcNewPool()*Pool{return&Pool{wg:&sync.WaitGroup

multithreading - 如果 goroutines 涉及用户空间线程,阻塞操作是否会导致整个线程的上下文切换?

如果这个问题太愚蠢,我们深表歉意。我正在阅读goroutines的详细信息Here.根据该页面,它说Goroutines被多路复用到少量操作系统线程上,而不是1:1映射,据我所知,我所能想到的是,有限的产生的操作系统线程数,在其中,它可能正在使用用户空间线程或协程。这个对吗?如果是这样,我可以举个例子,如果一个程序克隆了4个操作系统线程,其中有多个用户空间线程,并且在所有这4个线程中碰巧有一个阻塞操作以及非阻塞操作,操作系统会不会调度程序上下文切换所有这些线程,因为用户空间线程对操作系统线程不透明?出于好奇,是否存在goroutines的可能C实现,这有助于理解内部结构?

multithreading - 如果 goroutines 涉及用户空间线程,阻塞操作是否会导致整个线程的上下文切换?

如果这个问题太愚蠢,我们深表歉意。我正在阅读goroutines的详细信息Here.根据该页面,它说Goroutines被多路复用到少量操作系统线程上,而不是1:1映射,据我所知,我所能想到的是,有限的产生的操作系统线程数,在其中,它可能正在使用用户空间线程或协程。这个对吗?如果是这样,我可以举个例子,如果一个程序克隆了4个操作系统线程,其中有多个用户空间线程,并且在所有这4个线程中碰巧有一个阻塞操作以及非阻塞操作,操作系统会不会调度程序上下文切换所有这些线程,因为用户空间线程对操作系统线程不透明?出于好奇,是否存在goroutines的可能C实现,这有助于理解内部结构?

concurrency - D 中有等价的 goroutines 吗?

我喜欢Go,尤其是goroutines。它们简单而高效。经过一些挖掘后,它们似乎基本上是多路复用到内核线程池的光纤(如果我错了请纠正我)。也就是说,D中是否有任何标准库(或相对流行和受支持的第3方添加)?我想要的主要是:轻量级-线程使用过多内存并占用过多CPU简单-数据共享不太重要,但简单的消息传递很重要托管-如果它处于运行时级别会很好这里的主要目标是使Web服务器尽可能高效地与Node.js和Go的速度相媲美。这意味着可能有许多事件连接(http、websockets、数据流)。我喜欢提到的其他平台,但D更通用。如果不是太笨重,我会选择D而不是其他。 最佳

concurrency - D 中有等价的 goroutines 吗?

我喜欢Go,尤其是goroutines。它们简单而高效。经过一些挖掘后,它们似乎基本上是多路复用到内核线程池的光纤(如果我错了请纠正我)。也就是说,D中是否有任何标准库(或相对流行和受支持的第3方添加)?我想要的主要是:轻量级-线程使用过多内存并占用过多CPU简单-数据共享不太重要,但简单的消息传递很重要托管-如果它处于运行时级别会很好这里的主要目标是使Web服务器尽可能高效地与Node.js和Go的速度相媲美。这意味着可能有许多事件连接(http、websockets、数据流)。我喜欢提到的其他平台,但D更通用。如果不是太笨重,我会选择D而不是其他。 最佳

c++ - boost::asio::spawn yield 作为回调

我正在尝试使用boost::asio::spawn协程重写项目。项目的某些部分无法更改。比如存储协议(protocol)库也是用boost::asio写的,但是没有协程。问题是如何将yield_context转换为普通回调(boost::function对象或经典仿函数)。这就是我们在存储库API中的内容:voidasync_request_data(uint64_titem_id,boost::functioncallback);从示例中我们知道,asioyield上下文可以这样使用:my_socket.async_read_some(boost::asio::buffer(data

c++ - boost::asio::spawn yield 作为回调

我正在尝试使用boost::asio::spawn协程重写项目。项目的某些部分无法更改。比如存储协议(protocol)库也是用boost::asio写的,但是没有协程。问题是如何将yield_context转换为普通回调(boost::function对象或经典仿函数)。这就是我们在存储库API中的内容:voidasync_request_data(uint64_titem_id,boost::functioncallback);从示例中我们知道,asioyield上下文可以这样使用:my_socket.async_read_some(boost::asio::buffer(data

python - @types.coroutine 和 @asyncio.coroutine 装饰器有什么区别?

文档说:@asyncio.coroutineDecoratortomarkgenerator-basedcoroutines.Thisenablesthegeneratoruseyieldfromtocallasyncdefcoroutines,andalsoenablesthegeneratortobecalledbyasyncdefcoroutines,forinstanceusinganawaitexpression._@types.coroutine(gen_func)Thisfunctiontransformsageneratorfunctionintoacoroutinef