线程、并发、多线程并发

这篇具有很好参考价值的文章主要介绍了线程、并发、多线程并发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单线程并发

单线程并发,并非真正意义上的单线程。而是只有单一的用户线程。还包括数据库,socket等系统多线程。

单个用户线程:对于十万个用户同时访问服务器,有两种方式处理并发。

  1. 为每个用户开一个新的用户线程,每个线程内部采用阻塞通信的方式,即同步通信,从数据库中取数据、与服务器通信等,直到得到结果,返回给用户。其中涉及多个用户线程。

  2. 只有一个用户线程,采用非阻塞通信的方式,即异步通信,通过事件驱动的方式实现并发。从数据库中取数据、与服务器通信或与其他进程通信,并不会阻塞线程的执行,每次数据获取完毕,通过事件的方式,调用用户进程,处理得到的数据,返回给用户。其中,只有一个用户进程。

  3. 对于事件驱动的方法:会存在一个事件队列,唯一的用户进程会不断地依次处理队列中的事件。所以不会存在冲突。有两种处理事件的方法:基于监听器的事件处理机制和基于回调的事件处理机制。

常见的线程通信:与服务器进行通信socket,与数据库进行通信、与文件读写进程进行通信。

前者通过扩展空间的方式,后者通过缩短时间的方式。更快速地执行操作。

2 同步与异步 阻塞与非阻塞

  1. 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻

  2. 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。

  3. 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大

  4. 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

多线程同步阻塞。

单线程异步非阻塞:通过事件响应机制,包括监听器和回调两种方法,实现单线程,异步非阻塞。

this指针

this关键字指向的是当前对象的引用

this 不是指向类。而是在实例化的时候与当前类的实例也就是对象,进行绑定。

关于回调

对于Python与JavaScript这种,能够直接传递“函数类型”的参数的语言,回调函数可以作为另外一个函数的参数,进行传递。

在C++和java这种只能传递基本数据类型和构造数据类型的语言中,即函数不作为数据类型的语言中,可以通过传递整个对象的方法,使得被调用者,能够通过调用者对象的指针,进行回调,这也是设计模式的一种。(观察者模式?)

关于回调函数的本质理解:当其他程序执行时,能够通过回调函数,转移进程控制权限,给调用者。可以把调用者与被调用者分开。调用者能够显式调用被调用者,同时被调用这能通过回调函数隐式调用调用者。

关于回调函数的本质理解:回调函数在同一个层次内是没有用的,或者说没有必要的。如果一个人,在实现一个层次内部的函数执行权限转移过程中,可以直接进行相互调用,因为本质上,两个部分是完全可知的。但是在不同层次的调用中,例如用户层与系统层中,用户层调用系统层,可以通过显式调用,但是系统层并不会考虑用户层的具体实现,对用户层是不可知的。这个时候,系统层会通过传递来的回调函数,将进程控制权交给用户层。

那么问题来了,直接通过返回值的方式转移进程的控制权限不好吗。在回调的部分通过返回值,区分不同的情况,用户自己选择执行什么样的函数。

首先允许我,在这里将程序简单地分为用户层和系统层。用户层就是程序员编写的代码,系统层就是程序语言提供的外部库、框架、工具等。

关于回调函数的本质理解:回调函数在单线程的编程中也有一定的作用。在之前的疑问中,用户根据返回值调用不同的函数与系统调用回调函数与系统通过回调函数调用用户程序,后者,当回调程序执行完成后控制权依旧交给系统,不必考虑,系统在什么地方中断。在这里涉及一个关键的问题,到底是用户具有主动权还是系统具有主动权。在架构设计中有一个很关键的问题,系统应该提供大量的类、方法等工具,帮助用户实现一个完成的程序,还是系统应该实现主体的程序,在特定情况下调用用户的程序实现局部功能?

关于这个问题的讨论,我想应该牵扯到系统架构相关的很多知识,我觉得有空多读点专业类的书籍还是很有帮助的。理论书籍。要远比自己单纯的了解技术和知识好的多。

我想关于上边的问题,应该可以非常好的区分编程框架与库的区别。比如jQuery就是编程库,它提供了功能。springboot是编程框架,它提供了主体流程,用户只要实现少量的自定义模块,而不需要管理程序的一级一级调用过程。

简单来说,用户只要通过少量的注解,就能将自己的类注册到spring框架当中,用户完成的知识其中的一笑部分补充代码。

简单举例,假如我想要设计一个编程框架,这个框架是想要提供可以复用的功能,还是想完成主要的流程呢?

我之前觉得仿真程序的开发,不好的原因是扩展性、可读性、重用性都十分差,所以,从工程的角度来说,这些代码确实需要重构。

那么通过什么样的方式实现代码重构呢?最终的要的办法是实现模块化,将所有的功能模块化,并提供统一的标准接口,规范命名等。

另一个很重要的内容,是构建新的编程框架。使每一个开发人员都专注于搞算法和逻辑,而不是在无休止的重复尝试。写一堆无用的重复的逻辑代码。

模块化,提供编程的API,实现各种可以重复使用的功能。 编程框架,编程模型,实现主要的业务流程,作为系统层,用户通过注入的方式,将自己身构建的代码添加到系统流程中。系统通过回调的方式,实现特殊情况的处理。文章来源地址https://www.toymoban.com/news/detail-603550.html

到了这里,关于线程、并发、多线程并发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux网络编程】高并发服务器框架 线程池介绍+线程池封装

    前言 一、线程池介绍 💻线程池基本概念 💻线程池组成部分 💻线程池工作原理  二、线程池代码封装 🌈main.cpp 🌈ThreadPool.h 🌈ThreadPool.cpp 🌈ChildTask.h  🌈ChildTask.cpp 🌈BaseTask.h 🌈BaseTask.cpp 三、测试效果 四、总结 📌创建线程池的好处 本文主要学习 Linux内核编程 ,结合

    2024年01月16日
    浏览(91)
  • Linux网络编程:多进程 多线程_并发服务器

    文章目录: 一:wrap常用函数封装 wrap.h  wrap.c server.c封装实现 client.c封装实现 二:多进程process并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 三:多线程thread并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 ​​​​   read 函数的返回值 wrap.h  wrap

    2024年02月12日
    浏览(54)
  • [计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)

    网络层与传输层 内置于操作系统的内核中 ,网络层一般使用 ip 协议,传输层常用协议为 Tcp 协议和 Udp 协议, Tcp 协议和 Udp 协议拥有各自的特点和应用场景: sockaddr_in 结构体用于存储网络通信主机进程的 ip 和端口号等信息 小项目的完整文件的gittee链接 Tcp 服务器架构: 序列反序列

    2024年02月22日
    浏览(40)
  • 计算机网络编程 | 并发服务器代码实现(多进程/多线程)

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《网络编程》 当涉及到构建高性能的服务

    2024年02月08日
    浏览(68)
  • Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字

    文章目录: 一:线程池模块分析 threadpool.c 二:UDP通信 1.TCP通信和UDP通信各自的优缺点 2.UDP实现的C/S模型 server.c client.c 三:套接字  1.本地套接字 2.本地套 和 网络套对比 server.c client.c threadpool.c   server.c client.c server.c client.c

    2024年02月11日
    浏览(59)
  • 简单的TCP网络程序·线程池(后端服务器)

    目录 版本四:线程池 注意事项 文件:Task.hpp -- 任务单独为一个文件 组件:日志修改 新函数:vprintf() 可变参数的提取逻辑 vfprintf()的工作原理 初始化一个va_list 日志准备 获取时间小知识 日志初版 日志启动测试 TCP通用服务器(守护进程) * 新指令1:jobs -- 查看进程作业 新指令

    2024年02月09日
    浏览(42)
  • 【Linux网络编程】TCP并发服务器的实现(IO多路复用select)

    服务器模型主要分为两种, 循环服务器 和 并发服务器 。 循环服务器 : 在同一时间只能处理一个客户端的请求。 并发服务器 : 在同一时间内能同时处理多个客户端的请求。 TCP的服务器默认的就是一个循环服务器,原因是有两个阻塞 accept函数 和recv函数 之间会相互影响。

    2024年02月03日
    浏览(78)
  • 用Rust设计一个并发的Web服务:常用Rust库如Tokio、Hyper等,基于TCP/IP协议栈,实现了一个简单的并发Web服务器,并结合具体的代码讲解如何编写并发Web服务器的程序

    作者:禅与计算机程序设计艺术 1994年,互联网泡沫破裂,一批优秀的程序员、工程师纷纷加入到web开发领域。而其中的Rust语言却备受瞩目,它是一种现代系统编程语言,专注于安全和并发。因此,Rust在当下成为最流行的编程语言之一,很多框架也开始使用Rust重构,这使得

    2024年02月06日
    浏览(58)
  • 多进程并发TCP服务器模型(含客户端)(网络编程 C语言实现)

    摘要 :大家都知道不同pc间的通信需要用到套接字sockte来实现,但是服务器一次只能收到一个客户端发来的消息,所以为了能让服务器可以接收多个客户端的连接与消息的传递,我们就引入了多进程并发这样一个概念。听名字就可以知道--需要用到进程,当然也有多线程并发

    2024年02月17日
    浏览(60)
  • 【网络编程】实现一个简单多线程版本TCP服务器(附源码)

    accept 函数是在服务器端用于接受客户端连接请求的函数,它在监听套接字上等待客户端的连接,并在有新的连接请求到来时创建一个新的套接字用于与该客户端通信。 下面是 accept 函数的详细介绍以及各个参数的意义: sockfd: 是服务器监听套接字的文件描述符,通常是使用

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包