Home Backend Development PHP Tutorial PHP7 Kernel Analysis 10 Thread Safety

PHP7 Kernel Analysis 10 Thread Safety

Apr 13, 2018 pm 03:27 PM
php php7 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;
};
Copy after login
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 10 Thread Safety


##Related recommendations:


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!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

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

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

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

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

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

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

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 Quick Guide CakePHP Quick Guide Sep 10, 2024 pm 05:27 PM

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.

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

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

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

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

See all articles