PHP7 Kernel Analysis 10 Thread Safety
The content of this article is about the thread safety of PHP7 kernel analysis 10. Now I share it with you. Friends in need can refer to it
1. Thread safety resource manager
Most of PHP's SAPIs are single-threaded environments, such as cli, fpm, and cgi. Each process only starts one main thread. There is no thread safety issue in this mode, but there are also multi-threaded environments. , such as Apache, in this case you need to consider the issue of thread safety, because there are many global variables in PHP, such as the most common ones: EG, CG. If multiple threads share the same variable, it will conflict, so PHP has many The thread application model provides a safety mechanism: Zend Thread Safe (ZTS).
PHP abstracts a Thread Safe Resource Manager (TSRM) specifically to solve the problem of thread safety. The implementation principle is relatively simple: since it is so difficult to share resources, then just don’t share them. Threads no longer share the same global variable, but each makes a copy. When using data, each thread takes its own copy without interfering with each other.
typedef struct { size_t size; //资源的大小 ts_allocate_ctor ctor; //初始化函数 ts_allocate_dtor dtor; int done; } tsrm_resource_type; struct _tsrm_tls_entry { void **storage; //资源数组 int count; //拥有的资源数:storage数组大小 THREAD_T thread_id; //所属线程id tsrm_tls_entry *next; };
If a resource will be used by multiple threads, you first need to register the resource with TSRM in advance. Then TSRM assigns a unique number to the resource and saves the size, initialization function, etc. of the resource to a In the tsrm_resource_type structure, each thread can only access this resource through the number assigned by TSRM; then when the thread obtains the resource with this number, if TSRM finds that it is the first request, it will allocate a piece of memory based on the resource size at registration, and then Call the initialization function to initialize and save this resource for subsequent use by this thread.
Each thread has a tsrm_tls_entry structure. All resources of the current thread are stored in the storage array, and the subscript is the id of each resource. In addition, the tsrm_tls_entry structure of all threads is saved in an array: tsrm_tls_table, which is a global variable. The position of each thread's tsrm_tls_entry structure in this array is obtained modulo the thread ID and the preset number of threads (tsrm_tls_table_size), that is It is said that multiple threads may be stored in the same location of tsrm_tls_table, so tsrm_tls_entry is a linked list. When looking for resources, first get a tsrm_tls_entry based on: thread id % tsrm_tls_table_size, and then start traversing the linked list to compare thread_id to determine whether it belongs to the current thread.Thread Local Storage (TLS), after creating the tsrm_tls_entry of the current thread, this value will be saved to the TLS of the current thread, so that when ts_resource() obtains resources, it can be directly used through tsrm_tls_get() Got it, saving time on locking and retrieval.
PHP7 kernel Analysis of memory management in 9
PHP7 kernel analysis of 8 and the like
PHP7 kernel analysis of 7 Zend engine execution process
The above is the detailed content of PHP7 Kernel Analysis 10 Thread Safety. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP is an open source MVC framework. It makes developing, deploying and maintaining applications much easier. CakePHP has a number of libraries to reduce the overload of most common tasks.

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op
