如题
我需要进行类定时器的任务,可是,如果我自行开辟协程或线程,无法与Cinatra耦合
我当然知道正常人都是多线程多协程,可是我目前希望单线程多协程,这样不用加锁
现在的问题是,我无法提交至用于处理网络请求的执行器中执行异步函数,另起炉灶,会导致线程竞争
多线程没有这个问题,本身就要加锁防止线程竞争,但是单线程会有这个问题
可能可以直接初始化请求一次,然后得到执行器,初始化,这样就行了,但是这样很不优雅
#include "cinatra/coro_http_server.hpp"
#include <cinatra.hpp>
#include <iostream>
#include <thread>
using namespace cinatra;
using namespace async_simple::coro;
int main() {
// 1. http_server (即 coro_http_server) 默认构造,不能传线程数
coro_http_server server(1, 8080);
// 3. 获取真正的全局 executor 并提交任务打印线程 ID
auto* global_executor = coro_io::get_global_executor();
if (global_executor) {
global_executor->schedule([]() { std::cout << "[coro_io Global Executor Thread ID]: " << std::this_thread::get_id() << std::endl; });
}
// 4. 新版路由注册接口是 set_http_handler,不是 register_handler
// 必须返回 async_simple::coro::Lazy<void>
server.set_http_handler<GET>("/check_thread", [](request& req, response& res) -> Lazy<void> {
std::cout << "[HTTP Router Thread ID]: " << std::this_thread::get_id() << std::endl;
res.set_status_and_content(status_type::ok, "Check console for thread IDs.");
co_return;
});
// 5. 绑定端口并启动
server.async_start();
return 0;
}
[root@DESKTOP-9BUM11M release]# ./4ascend-online
[coro_io Global Executor Thread ID]: 137600198044464
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
[HTTP Router Thread ID]: 137600197327664
如题
我需要进行类定时器的任务,可是,如果我自行开辟协程或线程,无法与Cinatra耦合
我当然知道正常人都是多线程多协程,可是我目前希望单线程多协程,这样不用加锁
现在的问题是,我无法提交至用于处理网络请求的执行器中执行异步函数,另起炉灶,会导致线程竞争
多线程没有这个问题,本身就要加锁防止线程竞争,但是单线程会有这个问题
可能可以直接初始化请求一次,然后得到执行器,初始化,这样就行了,但是这样很不优雅
[root@DESKTOP-9BUM11M release]# ./4ascend-online [coro_io Global Executor Thread ID]: 137600198044464 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664 [HTTP Router Thread ID]: 137600197327664