当前位置:网站首页>Three core problems of concurrent programming
Three core problems of concurrent programming
2022-07-02 01:29:00 【Software testing network】
contrary , Concurrent programming is a comprehensive technology , meanwhile , It is related to real life There is a close connection between the scenes of .
There are three core issues in concurrent programming :
- Division of labor
- Synchronization problem
- The problem of mutual exclusion
This paper gives a brief introduction to these three core issues .
1 Division of labor
About division of labor , The more official explanation is : A relatively large task is split into multiple tasks of appropriate size , These tasks of the right size are given to the right thread to execute .
The division of labor emphasizes the performance of execution .
▊ Analogy with real cases
The division of labor can be understood by analogy with the scenes in real life , for example , If you are a listed company CEO, that , Your main job is to plan the strategic direction of the company and manage the company well . In terms of how to manage the company , There are many tasks involved .
here , It can be seen as a big task to manage the company well , This big task can include personnel recruitment and management 、 The product design 、 product development 、 Product operation 、 Product promotion 、 Tax statistics and calculation, etc . If these tasks are assigned to CEO Do it alone , So estimate CEO You will get tired and lie down .CEO One person finishes all the daily work of the company, as shown in the figure 1 Shown .
chart 1 CEO One person finishes all the daily work of the company
Pictured 1 Shown , company CEO It is a very undesirable way for one person to finish all the daily work of the company , This will make the company unable to operate normally , So how to do it ?
There is a good way to break down the daily work of the company , Hand over the recruitment and management of personnel to the human resources department , Will produce The product design work is handed over to the design department , Hand over the product development work to the R & D department , Hand over the product operation and product promotion to Yun Sales and marketing department , Hand over the company's tax statistics and calculation to the finance department .
such ,CEO The focus of our work has become to keep abreast of the work of each department , Coordinate and coordinate the work of all departments , And think about how to plan the company's strategy .
The daily work of the company after division of labor is shown in the figure 2 Shown .
chart 2 The daily work of the company after division of labor
Divide the daily work of the company , You can find , The work among departments can be carried out in parallel . for example , When the human resources department conducts employee performance appraisal , The design department and R & D department are designing and developing the company's products , meanwhile , The company's operators are communicating with designers and R & D personnel on how to better improve the company's products , The marketing department is making greater efforts to publicize and promote the company's products , The finance department is counting and calculating various financial statements of the company . Everything is so orderly .
therefore , in real life , It is very important to arrange the right people to do the right things . Mapping to the realm of concurrent programming The same is true .
▊ Division of labor in concurrent programming
In concurrent programming , It is also necessary to split a large task into several smaller tasks , And give these small tasks to Different threads execute , Pictured 3 Shown .


chart 3 Split a large task into several smaller tasks
In concurrent programming , Because multiple threads can execute concurrently , Therefore, it can improve the execution efficiency of the task to a certain extent .
In the field of concurrent programming , One more thing to note is : Assign tasks to appropriate threads to do . in other words , Don't leave the task performed by the main thread to the child thread , otherwise , There is no way to solve the problem .
It's like a company's CEO It is the same as handing over the planning of the company's future work to a product developer , Not only can not plan the future of the company , It can even run counter to the company's values .
stay Java in , Thread pool 、Fork/Join The framework and Future Interfaces are all ways to realize division of labor . In multithreaded design pattern ,Guarded Suspension Pattern 、Thread-Per-Message Pattern 、 producer — Consumer model 、 Two stage termination mode 、Worker-Thread Patterns and Balking Patterns are the implementation of division of labor .
2 Synchronization problem
In concurrent programming , Synchronization refers to a thread executing its own tasks , How to notify other threads to continue the task , It can also be understood as collaboration between threads , Synchronization emphasizes the performance of execution .
▊ Analogy with real cases
You can find cases similar to the synchronization problem in concurrent programming in real life .
for example , Zhang San 、 Li Si and Wang Wu jointly developed a project , Zhang San is a front-end developer , He needs to wait for Lisi's development interface task to complete before he starts rendering page , Li Si needs to wait for Wang Wu's service development to complete before writing the interface .
in other words , There is a dependency between tasks , When the task ahead is finished , To perform the following tasks .
in real life , This synchronization of tasks , It is more realized by the exchange and communication between people . for example , Wang Wu's service development task has been completed , Tell Li Si , Li Si immediately began to implement the task of developing interfaces . After Li Si's interface development is completed , Tell Zhangsan again , Zhang San immediately calls the interface developed by Li Si to render the returned data to the page . in real life The synchronization model of is shown in the figure 4 Shown .
chart 4 Synchronous model in real life
From the figure 4 It can be seen that , in real life , Zhang San 、 There is a dependency between the tasks of Li Si and Wang Wu , Zhang San's task of rendering the page depends on Li Si's task of developing the interface , Li Si's task of developing interfaces depends on Wang Wu's task of developing services .
▊ Synchronization in concurrent programming
In the field of concurrent programming , The synchronization mechanism refers to the task execution of a thread , How to notify other threads to continue executing tasks , The simple model of concurrent programming synchronization is shown in the figure 5 Shown .

chart 5 A simple model of concurrent programming synchronization
From the figure 5 It can be seen that , In concurrent programming , Tasks between multiple threads are dependent .
Threads A Need to block the waiting thread B The task cannot be executed until the task is completed , Threads B Need to block the waiting thread C The task cannot be executed until the task is completed . Threads C After executing the task, the thread will wake up B Go ahead with the task , Threads B After executing the task, the thread will wake up A Go ahead with the task .
This synchronization mechanism between threads , You can use the following if Pseudo code to represent .
Above if What pseudo code means is : When the dependent task is completed , Perform the current task , otherwise , Continue to wait Depend on the execution of the task .
In the real world , It is often necessary to judge whether the dependent task has been completed in time , It can be used at this time while Follow Ring instead of if Judge , while The pseudocode is as follows .
Above while What pseudo code means is : If the dependent task is not completed , Then wait all the time , Until the dependent task is completed , To execute the current task .
In the field of concurrent programming , The synchronization mechanism has a very classic model —— producer — Consumer model . If the queue is full , Then the producer thread needs to wait , If the queue is not satisfied , You need to wake up the producer thread ; If the queue is empty , Then the consumer thread needs to wait , If the queue is not empty , You need to wake up consumers .
The following pseudocode can be used to represent the producer — Consumer model .
- Producer pseudocode

- Consumer pseudocode

stay Java in ,Semaphore、Lock、synchronized.、CountDownLatch、CyclicBarrier、Exchanger and Phaser And other tool classes or frameworks have implemented the synchronization mechanism .
3 The problem of mutual exclusion
In concurrent programming , The mutual exclusion problem generally refers to that only one thread is allowed to access the shared resources in the critical area at the same time . Mutex emphasizes the correctness of multiple threads executing tasks .
▊ Analogy with real cases
A typical scenario of mutual exclusion problem in reality is that multiple vehicles at an intersection merge into a one-way street , Pictured 6 Shown .

chart 6 Many cars at the intersection merge into a one-way street
From the picture 6 It can be seen that , When multiple vehicles cross an intersection and join the same one-way street , As the entrance of the one-way street can only accommodate one vehicle , So other vehicles need to wait for the vehicles in front to pass through the one-way street entrance , Then pass through the entrance of one-way street orderly . This is the mutually exclusive scene in real life .
▊ Mutual exclusion in concurrent programming
In concurrent programming , Division and synchronization emphasize the performance of tasks , Mutual exclusion emphasizes the correctness of task execution , That is, thread safety .
If in concurrent programming , Multiple threads enter the critical area to access the same shared variable at the same time , Thread safety problems may arise , This is determined by the atomicity of threads 、 Visibility and order issues .
And solve atomicity in concurrent programming 、 The core solution to the visibility and ordering problem is the mutual exclusion between threads .
for example , have access to JVM Provided in synchronized Lock to realize mutual exclusion between multiple threads , Use synchronized The pseudo code of the lock is as follows .
- Modification methods

- Decorated code block

- Modified static method

except synchronized lock ,Java It also provides ThreadLocal、CAS、 Atomic classes and with CopyOnWrite The first concurrent container class 、Lock Lock and read / Write locks, etc. , They all implement the mutual exclusion mechanism of threads .
边栏推荐
- 人工智能在网络安全中的作用
- Variables and constants of go language foundation
- Modeling essays series 124 a simple coding method
- 笔者更加愿意将产业互联网看成是一个比消费互联网要丰富得多的概念
- Design and control of multi rotor aircraft (VII) -- sensor calibration and measurement model
- Global and Chinese markets of edge AI software 2022-2028: Research Report on technology, participants, trends, market size and share
- uTools
- Based on Simulink and FlightGear, the dynamic control of multi rotor UAV in equilibrium is modeled and simulated
- 企业应该选择无服务器计算吗?
- Convolutional neural network (including code and corresponding diagram)
猜你喜欢

MPLS experiment operation

微信小程序中使用tabBar

969 interlaced string

GL Studio 5 安装与体验

ES6 new method of string
![[dynamic planning] interval dp:p3205 Chorus](/img/25/3dc7132e1aaa5c0eca87382692fc12.jpg)
[dynamic planning] interval dp:p3205 Chorus

Datawhale community blackboard newspaper (issue 1)

Android high frequency network interview topic must know and be able to compare Android development environment

Learning note 3 -- Key Technologies of high-precision map (Part 1)

6-2漏洞利用-ftp不可避免的问题
随机推荐
The first "mobile cloud Cup" empty publicity meeting, looking forward to working with developers to create a new world of computing!
Learn about servlets
NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis
We should make clear the branch prediction
What are the differences between software testers with a monthly salary of 7K and 25K? Leaders look up to you when they master it
【疾病检测】基于BP神经网络实现肺癌检测系统含GUI界面
浅浅了解Servlet
Another programmer "deleted the library and ran away", deleted the code of the retail platform, and was sentenced to 10 months
Fastadmin controls the length of fields in the table
Brief description of grafana of # yyds dry goods inventory # Prometheus
Exclusive delivery of secret script move disassembly (the first time)
游戏思考15:全区全服和分区分服的思考
This is the report that leaders like! Learn dynamic visual charts, promotion and salary increase are indispensable
Architecture evolution from MVC to DDD
Android: the kotlin language uses grendao3, a cross platform app development framework
卷积神经网络(包含代码与相应图解)
遷移雲計算工作負載的四個基本策略
Datawhale 社区黑板报(第1期)
[Maya] the error of importing Maya into Metahuman
Exclusive delivery of secret script move disassembly (the first time)


