线程通信和进程通信方法
进程间
进程间通信(英语:Inter-Process Communication,简称IPC),指至少两个进程或线程间传送数据或信号的一些技术或方法
管道
单向通信,只能在具有亲缘关系的进程之间使用
命名管道
命名管道(Named Pipe):允许无亲缘关系的进程间进行通信。
共享内存
使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
信号量
信号量(Semaphore):用于控制对共享资源的访问,防止出现竞态条件。
消息队列
消息发送者将消息发送到队列中,接收者从队列中取出消息
套接字
套接字(Socket):适用于不同计算机或操作系统之间的进程通信。
信号
信号(Signal):进程会收到一个信号,可以用来通知进程发生了某个事件。
线程间
线程间常用的通信方式有互斥锁,读写锁,条件变量,自旋锁和屏障
互斥锁(Mutex)
控制对共享资源的访问,确保同一时刻只有一个线程可以访问该资源。
读写锁(Read-Write Lock)
允许多个线程同时读取共享资源,但在写入时必须互斥。
条件变量(Condition Variable)
让线程等待某些条件满足后再继续执行,用于线程间通信和同步。
自旋锁(Spin Lock)
在使用短时间内的锁保护共享资源时,相比于互斥锁,自旋锁不会导致线程阻塞,而是一直进行忙等待直到获得锁。
屏障(Barrier)
让多个线程在特定点处等待彼此,直到所有线程都到达这个点才能继续执行后面的代码。
https://blog.csdn.net/qq_39942341/article/details/134728701?spm=1001.2014.3001.5501
数据库事务具有以下四大特性
ACID四个特性:
1、原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2、一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
3、隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4、持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
面向对象的设计原则
单一职责(Single Responsibility Principle)
这个原则顾名就可以思义,就是一个类应该只负责一个职责,术语叫:仅有一个引起其变化的原因。简单点说:一个类中应该是一组相关性很高的函数及数据的封装,个中含义请自行意会。看起来简单,但是做起来就难了,这可能是六大原则中最难以熟练掌握的一个原则了,它高度依赖程序员的自身素质及业务场景。
开闭原则(Open Close Principle)
一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
里氏替换原则(Liskov Substitution Principle)
所有引用基类(父类)的地方必须能透明地使用其子类的对象。
依赖倒置原则(Dependence Inversion Principle)
抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
关键点:
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象
- 抽象不应该依赖细节
- 细节应该依赖抽象
接口隔离原则(Interface Segregation Principle)
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
迪米特原则(Law of Demeter 又名Least Knowledge Principle)
一个软件实体应当尽可能少地与其他实体发生相互作用。
https://zhuanlan.zhihu.com/p/58092071
局部变量,全局变量,静态变量
局部变量
拥有局部作用域的变量
全局变量
在所有作用域都可访问的变量
静态变量
在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量
https://www.cnblogs.com/MinPage/p/13871741.html