线程、并发、多线程并发

单线程并发

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

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

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

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

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

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

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

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

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

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

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

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

多线程同步阻塞。

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

this指针

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

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

关于回调

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

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

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

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

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

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

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

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

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

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

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

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

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

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

模块化,提供编程的API,实现各种可以重复使用的功能。 编程框架,编程模型,实现主要的业务流程,作为系统层,用户通过注入的方式,将自己身构建的代码添加到系统流程中。系统通过回调的方式,实现特殊情况的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12.postgresql--plsql

[ <<label>> ] [ DECLAREdeclarations ] BEGINstatements END [ label ];do $$ beginraise notice 无Label标签与声明部分; end $$; 或者 do $$ <<test>> beginraise notice 使用label标签; end test $$; 或者 do $$ <<test>> declarei in…

java ajax

1.ajax定义:异步刷新技术 2.ajax语法 3.ajax实战 在不需要点击刷新按钮时&#xff0c;达到局部刷新的效果&#xff0c;如下图所示 步骤一&#xff1a;创建工程/包/js 步骤二&#xff1a;数据库/表创建 步骤三&#xff1a;实体类 步骤四&#xff1a;UserDao package cn.kgc…

音频数据分割单独处理后再拼接出现跳跃间断点的处理方法

+hezkz17进数字音频系统研究开发交流答疑 1如图所示 问题1: 对于一个81920字节的音频文件,如果是分割成小块4096输入(无重叠,均分),在频域上做去噪算法,每4k数据返回到时域上再拼接成80k的处理结果文件,发现处理结果有异常有跳跃间断点,像是频谱泄露?分割也需要有重…

计算机网络 day9 DNAT实验

目录 DNAT DNAT策略的典型应用环境 DNAT策略的原理 在网关中使用DNAT策略发布内网服务器 DNAT实验&#xff1a; 实验环境&#xff1a; DNAT网络规划拓扑图&#xff1a; 步骤&#xff1a; 1、创建linux客户端Web网站&#xff08;go语言&#xff09;&#xff0c;实现Web服…

如何快速爬取国内985大学学术学报pdf文件

背景 最近&#xff0c;在爬取关于国内985大学的学报时&#xff0c;我注意到大部分大学学报站点格式都采用相似的形式&#xff0c;并且PDF链接都使用自增的ID。然而&#xff0c;我也发现了一个问题&#xff0c;即大多数PDF链接的ID并不是连续的。现在我将向你分享一些方法&…

15 大模型训练 内存优化

先看GPU结构&#xff0c;我们常说显存的时候&#xff0c;说的一般就是Global memory 训练的过程中&#xff0c;我们为了反向传播过程&#xff0c;必须将中间的结果&#xff08;激活值&#xff09;存储下来。 在训练的过程中&#xff0c;那些会消耗内存呢&#xff1f; model we…

web-报错注入

必要的函数 rand select rand(0) from hackbiao; rand(0)&#xff1a;生成以0开头的随机数&#xff0c;生成的数量与字段下数据的条数相等。如果i没有这个地段的话&#xff0c;就会自己形成一个新的字段打印出来。 count和group by grouip by在进行排序的时候&#xff0c;会…

【分布式应用】Ceph的实战应用

目录 一、创建 CephFS 文件系统 MDS 接口1.1服务端操作1&#xff09;在管理节点创建 mds 服务2&#xff09;查看各个节点的 mds 服务3&#xff09;创建存储池&#xff0c;启用 ceph 文件系统4&#xff09;查看mds状态&#xff0c;一个up&#xff0c;其余两个待命&#xff0c;目…

SpringCloud(五)Gateway 路由网关

一、路由网关 官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ 我们需要连接互联网&#xff0c;那么就需要将手机或是电脑连接到家里的路由器才可以&#xff0c;而路由器则连接光猫&#xff0c;光猫再通过光纤连接到互联网&a…

Jest单元测试(一)

Jest 简介 Jest是Facebook一套开源的 JavaScript 测试框架&#xff0c;它自动集成了断言、JSDom、覆盖率报告等测试工具。 他适用但不局限于使用以下技术的项目&#xff1a;Babel, TypeScript, Node, React, Angular, Vue 官网地址&#xff1a;https://jestjs.io/en/ Jest 安…

对 Jenkins+ANT+Jmeter 接口测试的实践

目录 1、前言 2、框架与数据准备 3、脚本设计 4、整理测试报告 1、前言 JenkinsANTJMeter是一种常见的接口测试实践方案&#xff0c;可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具&#xff0c;ANT是一个构建工具&#xff0c;而JMeter是一个功能强大…

SPEC CPU 2006 1.2 D2000 ARM64 aarch64平台 docker 环境下的编译 宿主机测试

由于spec cpu 2006版本太老&#xff0c;现代操作系统gcc版本远高于gcc4.3&#xff0c;且tools也没有提供arm64架构程序文件&#xff0c;导致安装编译会报大量编译错误&#xff0c;难以适配。故采用docker方式尝试编译。 系统 rootyeqiang-greatwall:/home/yeqiang/Downloads#…

JS逆向系列之猿人学爬虫第18题-jsvmp - 洞察先机

文章目录 目标网址加密参数分析Python 实现往期逆向文章推荐目标网址 https://match.yuanrenxue.cn/match/18题目标着难度是困难级别,主要还是vmp保护的JS代码调试困难,理清逻辑就会变得简单了 加密参数分析 请求第一页时没有加密参数,从第二页开始,url会携带t和v两个参数…

240. 搜索二维矩阵 II

题目描述&#xff1a; 主要思路&#xff1a; 利用矩阵中的单调性进行搜索。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int nmatrix.size(),mmatrix[0].size();int in-1,j0;while(i>0&&j<m){if(m…

详解CPU的态

目录 1.CPU的工作过程 2.寄存器 3.CPU的上下文 4.系统调用 5.CPU的态 1.CPU的工作过程 CPU要执行的指令的地址存在寄存器中&#xff0c;指令存放在内存中&#xff0c;而CPU本质上就是一个去内存中根据地址取指令&#xff0c;然后执行指令的硬件。 举一个例子&#xff1a…

【蓝图】p27开关门互动实现

p27开关门互动实现 创建一个门 添加初学者内容包 拖拽一个门到场景中 添加一个碰撞 创建盒体触发器 左侧模式->基础->盒体触发器&#xff0c;拖拽到门上&#xff0c;调整大小 开关门互动实现 做一个开门互动 要把开门逻辑写在关卡蓝图里 门设置为可移动 打开关卡蓝…

link和@import的区别,性能优化

link和import的区别 两者都是外部引用CSS的方式&#xff0c;它们的区别如下&#xff1a; link是XHTML标签&#xff0c;除了加载CSS外&#xff0c;还可以定义RSS等其他事务&#xff1b;import属于CSS范畴&#xff0c;只能加载CSS。 link引用CSS时&#xff0c;在页面载入时同时加…

url解析与拼接工具UrlUtils

import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map;/*** 功能描述:url解析与拼接*/ public class UrlUtils {/*** 在给定的url后面拼接查询参数* param baseUrl url地址* param params 要拼接的查询参数map* return 拼接上params查…

SpringBoot整合knife4j

knife4j 文档地址&#xff1a;https://doc.xiaominfo.com/ knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。 Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和…

实用在线工具网站分享

一、bejson网站&#xff1a; 1.功能 1&#xff09;json工具 2&#xff09;编码/解码、加密/解密 3&#xff09;格式化工具 4&#xff09;网络相关工具 5&#xff09;前后端工具 6&#xff09;正则生成等其他 7&#xff09;文档处理 8&#xff09;图片处理 9&#xff09;文字处…