Linux C/C++ 学习日记(34):协程(四):服务器向Mysql请求数据的三种编程方式:同步、线程、协程

注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。

客户端、服务器、Mysql服务器

  • 客户端申请数据
  • 服务器向Mysql发送数据的请求
  • 服务器接收Mysql的数据
  • 服务器回复给客户端

服务器向Mysql请求数据的三种编程方式

1. 同步

cpp 复制代码
int main()
{

    mysql_query(mysql_fd);
    mysql_recv(mysql_fd);
    parse_data(buf);
    send(client_fd);


    mysql_query(mysql_fd);
    mysql_recv(mysql_fd);
    parse_data(buf);
    send(client_fd);

    ....

    other();
 
}

2. 线程

cpp 复制代码
handle()
{
    mysql_query(mysql_fd);
    mysql_recv(mysql_fd);
    parse_data(buf);
    send(client_fd);
}



int main()
{
    for(n)
    {
        pthread_create(handle);
    }

    other();
    
}

3. 协程

cpp 复制代码
handle()
{
    
    mysql_query(mysql_fd);
    mysql_recv(mysql_fd);
    parse_data(buf);
    
    nty_send(client_fd);
}


schedule_run()
{
    // 调度协程
    ....
}


int main()
{
    hook_init(); // 把mysql_query内部的io都弄成协程式的io(可在协程函数间切换)
    for(n)
    {
       coroutine_create(handle);
    }
    pthread_create(schedule_run);    
    
    other();

}

注意:可以通过hook来实现将send、recv等io操作函数都搞成协程式的io(包括mysql中的io操作函数),这样子mysql内部封装的io函数也可以定位到当前协程函数,进而进行切换。

(如果定位不到,则默认传统io)

总结:

  • 多线程和多协程都是同步的编程方式,同时有异步的性能(线程或协程遇到阻塞CPU就会切换到另一个线程或协程)。
  • 区别在于多协程只占用一个线程,一个协程创建的消耗(KB级别)远小于一个线程的消耗(MB级)
相关推荐
('-')1 天前
《从根上理解MySQL是怎样运行的》第五章学习笔记
笔记·学习·mysql
组合缺一1 天前
Solon AI 开发学习3 - chat - 模型配置与请求选项
java·学习·ai·chatgpt·langchain·solon
Caarlossss1 天前
jdbc学习
java·开发语言·学习·http·tomcat·maven
AA陈超1 天前
以 Lyra 的架构为基础,创建一个名为 “Aura“ 的英雄并实现发射火球技能
c++·笔记·学习·ue5·lyra
('-')1 天前
《从根上理解MySQL是怎样运行的》第二张学习笔记
笔记·学习·mysql
d111111111d1 天前
STM32外设学习-I2C通信(代码)--MPU6050--笔记
笔记·stm32·单片机·嵌入式硬件·学习
一 乐1 天前
英语学习激励|基于java+vue的英语学习交流平台系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·学习·小程序
martian6651 天前
第九章:如何学习和掌握BI?
大数据·数据仓库·学习·etl·bi
musk12121 天前
人工智能学习大纲,豆包深入研究版
人工智能·学习
胡童嘉1 天前
长沙烈焰鸟网络科技有限公司实习day13日记
功能测试·学习·职场和发展·游戏引擎·cocos2d