Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用异步请求而不是与互斥体同步的多线程设计模式的名称是什么?_Multithreading_Design Patterns_Synchronization - Fatal编程技术网

Multithreading 使用异步请求而不是与互斥体同步的多线程设计模式的名称是什么?

Multithreading 使用异步请求而不是与互斥体同步的多线程设计模式的名称是什么?,multithreading,design-patterns,synchronization,Multithreading,Design Patterns,Synchronization,我想知道设计模式的“官方”名称是什么,在这种模式中,只有一个线程实际处理一些资源(数据库、文件、通信接口、网络连接、日志等)而其他希望使用该资源执行某些操作的线程必须向该线程传递一条消息,并(可选地)等待关于完成的通知 我发现一些文章将这种方法称为“中央控制器”,但谷歌并没有给出太多关于这一特定短语的信息 另一方面,这并不完全是“消息泵”或“事件队列”,因为它与GUI或向应用程序传递某些消息的操作系统无关 它也不是“工作队列”或“线程池”,因为这个单个线程只用于这个单个活动(管理单个资源),而不

我想知道设计模式的“官方”名称是什么,在这种模式中,只有一个线程实际处理一些资源(数据库、文件、通信接口、网络连接、日志等)而其他希望使用该资源执行某些操作的线程必须向该线程传递一条消息,并(可选地)等待关于完成的通知

我发现一些文章将这种方法称为“中央控制器”,但谷歌并没有给出太多关于这一特定短语的信息

另一方面,这并不完全是“消息泵”或“事件队列”,因为它与GUI或向应用程序传递某些消息的操作系统无关

它也不是“工作队列”或“线程池”,因为这个单个线程只用于这个单个活动(管理单个资源),而不是用来做任何抛出到它身上的事情

例如,假设有一个由一个线程管理的特殊通信接口(例如,让它成为Modbus,但这并不重要)。这个接口完全隐藏在一个对象及其线程和消息队列中。该对象具有允许使用该通信接口“读取”或“写入”数据的成员函数,并且这些函数可以由多个线程使用,而无需任何特殊的同步。这是因为这些函数的代码在内部将参数转换为消息/请求,并通过队列将其传递给处理程序线程,处理程序线程一次只处理一个请求


可以使用此设计模式来代替与保护共享资源的互斥体的显式同步,每个希望与该资源交互的线程都必须锁定/解锁共享资源。

适合这里的最佳模式可能是代理模式:

代理体系结构模式可用于构造分布式应用程序 具有解耦组件的软件系统,这些组件通过远程 服务调用。代理组件负责 协调通信,如转发请求。以及 用于传输结果和异常


适合这里的最佳模式可能是经纪人模式:

代理体系结构模式可用于构造分布式应用程序 具有解耦组件的软件系统,这些组件通过远程 服务调用。代理组件负责 协调通信,如转发请求。以及 用于传输结果和异常

我可以简单地称之为,或者更吸引人:非阻塞IO

As:“单线程端”在细节上做什么真的很重要吗?如果您处理数据库的“异步”,会有什么不同吗;或者其他远程服务器

他们的关键属性是:您的代码没有等待答案;但期待信息“稍后”流入

我可以简单地称之为,或者更吸引人:非阻塞IO

As:“单线程端”在细节上做什么真的很重要吗?如果您处理数据库的“异步”,会有什么不同吗;或者其他远程服务器


他们的关键属性是:您的代码没有等待答案;但期待信息“稍后”流入

我不会过多地关注名称,尽管设计模式是如此。@MatíasFidemraizer-如果知道名称,也许可以阅读一些关于这个主题的文章,以及它在实践中与其他解决方案的比较,那就太好了。到目前为止,我已经为不同的目的实现了好几次,有时是有意义的,有时我希望使用互斥来代替。我想为这个模式取一个名字,只是为了知道要寻找什么(;虽然设计模式不同,但我不会过多地关注名称。@MatíasFidemraizer-如果知道名称,也许可以阅读一下这个主题,以及它在实践中与其他解决方案的比较,那就太好了。到目前为止,我已经为不同的目的实现了好几次,有时有意义,有时我希望改用互斥体。我想知道该模式的名称,只是想知道要查找什么(;