asynchronous 相关问题

异步编程是用于推迟具有高延迟或低优先级的操作的策略,通常旨在提高软件的性能,响应性和/或可组合性。这些策略通常使用事件驱动编程和回调的某种组合来使用,并且可选地通过协同程序和/或线程来使用并发。

如果块不等待则在内部等待

我正在使用sequelize从数据库表中加载一些数据,并将其缓存在具有TTL的内存对象中,这样我就不会一遍又一遍地从数据库中读取数据。 // ffm.ts 从“续集”导入 { Op }...

回答 1 投票 0

即使套接字已收到数据,async_read_some() 操作也不会运行?

int main(int argc, char *argv[]) { int 接受计数器 = 0; std::array message_buffer; 升压::asio::io_context io_context; std::向量 int main(int argc, char *argv[]) { int acceptingCounter = 0; std::array<char, 2048> message_buffer; boost::asio::io_context io_context; std::vector<tcp::endpoint * > active_connections; std::vector< tcp::socket * > mySocks; //Create a tcp::acceptor object to listen for new connections. //Initialised to listen on port 13. tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 1025)); bool reading = false; std::cout << "Accepting..." << std::endl; while (true) { if (acceptingCounter < 1){ tcp::socket * sock = new tcp::socket(io_context); tcp::endpoint * endpoint = new tcp::endpoint; // mySocks.push_back(sock); acceptor.async_accept(*sock,*endpoint,[endpoint,&active_connections, &acceptingCounter, &mySocks, sock](boost::system::error_code e) { active_connections.push_back(endpoint); mySocks.push_back(sock); std::cout << "Client newly accepted on: " << *endpoint << std::endl; }); acceptingCounter++; } if (active_connections.size() > 0) { if (!reading){ for (tcp::socket * s : mySocks){ reading = true; s->async_read_some(boost::asio::buffer(message_buffer), [&message_buffer,s,&reading, mySocks](const boost::system::error_code &ec, std::size_t bytes_transferred) { //some completion code reading = false; } } } } io_context.poll(); io_context.restart(); //delete all endpoints and delete all sockets. } return 0; } 所以我在这里有一个服务器脚本,我似乎无法弄清楚为什么 async_read_some 完成代码永远不会运行。当我让我的客户端成功将数据发送到此套接字时,io_context.poll() 甚至使用 run() 似乎永远不会运行完成代码,或者异步操作永远不会被视为“已完成”,据我所知,因此它永远不会运行。 为什么它从未被视为已完成,套接字对象没有超出范围,甚至在套接字上使用阻塞 read() 时我也无法超越它并实际看到收到的数据?请注意,我确实有完成 lambda 函数,它实际上打印出来,它不仅被注释掉,如下所示,但没有显示任何内容。客户端肯定会发送数据,因为我没有收到错误代码,并且 async_send() 的完成处理程序在该端运行。我还检查了它是否正在接受并尝试通过查看远程端点在同一个套接字上读取,但它不起作用。 所以,您的代码存在很多问题。主要的一点似乎是它正在发挥作用。 我把它做成了独立的: 住在科里鲁 #include <array> #include <boost/asio.hpp> #include <iostream> using boost::asio::ip::tcp; using boost::system::error_code; int main() { int acceptingCounter = 0; std::array<char, 2048> message_buffer; boost::asio::io_context io_context; std::vector<tcp::endpoint*> active_connections; std::vector<tcp::socket*> mySocks; // Create a tcp::acceptor object to listen for new connections. // Initialised to listen on port 13. tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 1025)); bool reading = false; std::cout << "Accepting..." << std::endl; while (true) { std::cout << "Active connections: " << active_connections.size() << std::endl; std::cout << "Accepting counter: " << acceptingCounter << std::endl; if (acceptingCounter < 1) { tcp::socket* sock = new tcp::socket(io_context); tcp::endpoint* endpoint = new tcp::endpoint; // mySocks.push_back(sock); acceptor.async_accept( // *sock, *endpoint, [endpoint, &active_connections /*, &acceptingCounter*/, &mySocks, sock](error_code e) { std::cout << "Client newly accepted on: " << *endpoint << " (" << e.message() << std::endl; active_connections.push_back(endpoint); mySocks.push_back(sock); }); acceptingCounter++; } if (active_connections.size() > 0) { if (!reading) { for (tcp::socket* s : mySocks) { reading = true; s->async_read_some( boost::asio::buffer(message_buffer), [/*&message_buffer, s,*/ &reading, mySocks](error_code ec, size_t transferred) { std::cout << "Received: " << transferred << " bytes (" << ec.message() << ")" << std::endl; // some completion code reading = false; }); } } } io_context.run(); io_context.restart(); // delete all endpoints and delete all sockets. } } 通过 Coliru 或本地进行现场演示: 问题 你有内存泄漏,竞争条件,不必要的动态分配,使用原始的新/删除,但也 接受循环从不接受新连接 asio 的整个概念是抽象事件循环,你用大量的状态对其进行硬编码,就像你正在编写 C 风格的 epoll/select 代码一样。这意味着您甚至不能在单独的连接上并行进行两次读取。这与异步 IO 的目的背道而驰。 这是我的修复建议: [即将推出]

回答 1 投票 0

如何使用推力和CUDA流将内存从主机异步复制到设备

我想使用推力将内存从主机复制到设备,如下所示 推力::主机向量 h_vec(1 << 28); thrust::device_vector d_vec(1 << 28); thrust::c...

回答 2 投票 0

CUDA Thrust Kernels 可以在多个流上并行运行吗?

我正在尝试在不同的 CUDA 流上并行启动推力::填充两个不同的设备向量。然而,当我查看 NSight Systems 中的内核启动时,它们似乎是串行的......

回答 1 投票 0

Kotlin 中是否有类似 Dart 的 Completer 行为?

我正在为 flutter 创建插件。并面临 Android 原生的问题。 我正在使用 Android 版 Kotlin,并且希望使用 Flutter 平台通道的价值。 很难用英语解释。这是一个

回答 2 投票 0

如何将同步函数包装在异步协程中?

我正在使用 aiohttp 构建一个 API 服务器,该服务器将 TCP 请求发送到单独的服务器。发送 TCP 请求的模块是同步的,对于我来说是一个黑匣子。所以我的问题是

回答 7 投票 0

预览崩溃但模拟器运行正常

不幸的是,由于项目太大,我无法提供太多代码(跨多个文件,我在这里编写的任何代码无论如何都不会真正相关),但本质上我的预览...

回答 1 投票 0

如何立即取消使用 Ollama Python 库生成答案的 Asyncio 任务?

我正在使用 Ollama 通过 Ollama Python API 从大型语言模型 (LLM) 生成答案。我想通过单击停止按钮取消响应生成。问题是任务

回答 1 投票 0

WPF - 使用 WindowsFormsHost 生成异步 SSRS 报告

我有辅助静态方法来“自动”生成 SSRS 报告 公共静态WindowsFormsHost CreateSSRSReport(字符串reportServerUrl,字符串reportSystemName,字符串reportPath, ...

回答 1 投票 0

具有异步/等待的不同线程

我听说过很多关于如何不使用 async awiat 创建新线程的消息。我决定检查一下如果主函数和异步函数中有 while(true) 会发生什么。 命名空间

回答 1 投票 0

Python:发布许多音频文件并获取结果

Python 我的本地计算机上有数千个音频文件,我使用 FastAPI 运行一个 API,该 API 从音频文件中提取特征并将这些特征发送回给我 (json)。 程序如下...

回答 1 投票 0

在node.js(或一般的异步编程)中,当线程崩溃时,事件循环中的元素会发生什么?

我目前正在阅读有关反应式编程和参与者模型的内容。 我想知道的是:当异步事件(或消息)被触发时,程序的某些过程会对其做出反应,mea...

回答 1 投票 0

Swift async/await 使用任务实现刷新

我有一个场景,用户可以尝试从多个位置刷新应用程序,但我只想每个请求刷新一次。 只是想知道这样的事情是否可行,每次......

回答 1 投票 0

如何修复从 Databricks 对 OpenAI 嵌入的异步调用?

我正在尝试使用 OpenAI Python 包来获取一些用于文本分类的嵌入。 常规版本目前有效: 导入openai 从 openai.embeddings_utils 导入 get_embedding...

回答 1 投票 0

TypeScript 相当于 Dart `Completer`

在 Dart 中,我有一个 Completer,它返回一个 Future(Promise),并且 Future 可以在创建它的其他地方完成,例如 类 SomeClass { 最终完成者

回答 3 投票 0

无法将“(OpenAIChatResponse) async -> Void”类型的函数传递给需要具有两个函数的同步函数类型的参数

我有两个功能: @MainActor func sendMessage(messages: [Message], 完成: @escaping (_ response: OpenAIChatResponse) -> Void) async { 让 openAIMessages = messages.map({

回答 1 投票 0

为 C++ gRPC 异步服务器中丢失的连接提供什么通知

我有一个用 C++ 编写的适用于 Windows 的异步 gRPC 服务器。我想检测与客户端的连接丢失 - 网络连接是否丢失,或者客户端崩溃等。我看到参考...

回答 2 投票 0

如何从较大的异步方法中的同步方法调用异步方法

正如我所说,我想从同步方法调用异步方法,问题是同步方法正在被另一个异步方法调用,所以大致是这样的...... 异步 defparent_async()

回答 1 投票 0

Python 3.6 Flask Restful 和异步 for 循环

所以,我用 Sqlalchemy 配置了 Flask Restful,它从数据库返回数据,我想异步处理返回数据的函数调用。 例子 def 做某事...

回答 1 投票 0

EF Core 7 任务取消异常

我有一段用 ASP Core 7 API 编写的代码,使用 EF Core 7,使用 MSSQL 作为数据库。下面的代码是存储库为仪表板加载一些数据的地方。 公共异步任务<

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.