search
HomeBackend DevelopmentPHP Tutorial(Transfer) Interesting article: I am a thread, interesting article I am a thread_PHP tutorial

(reposted) Interesting article: I am a thread, interesting article I am a thread

From: Coder Turnover (WeChat ID: codingrising )

Author: IBM Liu Xin 

I am a thread. I was assigned a number: 0x3704 when I was born. Then I was led to a dark room, where I found many companions who were exactly like me.

My companion 0x6900 stayed for a long time. He said to me with a vicissitude of life:

The destiny of our thread is to process packages. You have to come back here immediately after handling the package, otherwise you may never come back.

I’m confused, package, what package?

"Don't be anxious, you will understand soon, we don't care for idlers here."

Sure enough, not long after, the door of the house opened, and a fierce-looking guy shouted:

"0x3704, come out!"

As soon as I came out, I was stuffed with a heavy package, and there was a piece of paper with instructions written on it.

"Go quickly and get rid of this package."

"Where to deal with it"

"Follow the instructions and get to the ready workshop first"

Sure enough, there was an indicator arrow on the ground, and I followed it to a large, bright room. There were already many threads here. Everyone was very nervous, as if they were always ready to rush forward.

As soon as I came in, I heard the announcement: "0x3704, enter the workshop"

I walked forward quickly, and many people behind me talked and said:

"He is so lucky, he can run as soon as he enters the ready state"

“Does it matter?”

“No, look at how high their priority is, ugh”

In front is the workshop. It is so beautiful here. No wonder the old thread always nags: It would be great if I could stay here forever.

The space here is large, the view is good, the air is fresh, the birds are singing and the flowers are fragrant, and there are many people I have never seen before, waiting to serve me like waiters.

They also have numbers, and more importantly, each one has a label, which reads: hard disk, database, memory, network card. . .

I can’t understand it now, let’s take a look at the steps:

Step 1: Take out the parameters from the package

Open the package, there is an HttpRequest object inside, you can get the two parameters userName and password

Step 2: Perform login operation

Oh, it turned out that someone wanted to log in. I handed the userName/password to the database attendant. He took the data and walked away slowly.

Why is he so slow? But can I just stay in the workshop for a while? I can't perform the third step anyway.

At this moment, the radio in the workshop rang:

"0x3704, I am CPU, remember the steps you are performing, and leave with the package immediately"

I slowly started to pack up

"Hurry up, other threads will come in soon"

Leaving this workshop, I came to a big room again, where many threads were slowly drinking tea and playing cards.

"Brother, you have nothing to do?"

"You're new here, you don't know that I'm waiting for the database server to give me the data! It is said that they are hundreds of thousands of times slower than us, take a good rest here"

"Huh? So slow? Someone here is logging into the system. Can you wait for so long?"

" Don't worry, haven't you heard that one day on earth is equivalent to one year on CPU? We use nanoseconds and milliseconds to measure time here. One second on earth is equivalent to several days for us. It's just in time"

Just take a nap. I don’t know how long it took, but the loudspeaker started broadcasting again:

"0x3704, your data is here, go and execute it"

I turned around and ran to the CPU workshop, only to find that people here could only get in and out!

There were bursts of laughter from behind:

"She is indeed a newbie, I don’t know that I have to go to the ready workshop to wait"

So I hurried to the ready workshop. This time I was not so lucky. I waited for a long time before being called into the CPU workshop again.

While waiting, I heard someone whispering:

"Have you heard that a thread was killed recently?"

"Why?"

"This guy stayed in the CPU workshop and kept pushing the CPU utilization to 100%, and then he was killed"

"Where did the Kill go after it was dropped?"

”Maybe it was garbage collected”

I shuddered in my heart, and quickly continued processing. I accepted more action blocks, and the second step of login was successful

Step 3: Build the homepage after successful login

This step is a bit time-consuming, because there is a lot of HTML to process, and I don’t know who wrote the code, so it is very annoying to process.

I was nervously making HTML, and the CPU started to beep:

"0x3704, I am CPU, remember the steps you are performing, and leave with the package immediately"

"Why?"

"Each thread can only run on the CPU for a period of time. When the time is up, it must be used by others. You go to the ready workshop and wait for me to call you."

That’s it, I have been in the two states of Ready and Running. I don’t know how many times it has been rotated, and finally the installation step list has completed the work.

Finally, the package containing html was successfully sent back.

As for what you do after logging in, I don’t care.

I’m going back to my dark room soon. I really can’t bear to leave here.

But compared to some threads, I am still lucky. They are completely destroyed after running, and I am still alive!

Back in the dark room, old thread 0x6900 asked:

"How was it? How did you feel on the first day?"

”The rules of our world are very complicated. First of all, you don’t know when you will be selected for execution; second, you may be interrupted at any time during the execution process and give up the CPU workshop;

"

"Young man understands well"

”I don’t understand why many threads die after executing, why are we still alive?”

”You still don’t know, immortality is our privilege, we have an official name here, called thread pool!”

The ordinary days pass like this day by day. As a thread, my daily life is to pick up packages, process packages, and then return to our dim home: the thread pool.

When I came back one day, I heard a brother say, I need to have a good rest today, tomorrow will be the craziest day.

I looked at the calendar, tomorrow is November 11th.

Sure enough, just after midnight, I don’t know what happened to those humans. They were frantically delivering packages. In order to cope with the massive influx of packages, no one in the thread pool could be idle. They all went out to process the packages. The utilization rate of the CPU workshop exceeded High, the hard drive is humming, and the network card is flashing like crazy. Even so, it still can't be processed, and it piles up like a mountain.

We have no choice, there are just too many. Most of these packages are just browsing the page, placing orders, buying, buying, buying.

I don’t know how long it took, but Bao Bao Mountain finally slowly disappeared.

Finally able to take a breath, I think I will never forget this day.

Through this incident, I understood the world I live in: this is an e-commerce website!

My daily job is to handle user login, browsing, shopping cart, ordering, and payment.

I asked the thread pool veteran 0x6900: "How long do we have to work?"

"You have to wait until the system restarts", 0x6900 said

"Have you ever experienced a system reboot?"

" How is it possible? , System restart is our moment of death, that is, the end of the world. Once restarted, the entire thread pool will be destroyed, time and space will disappear, and everything will start all over again"

"When will it restart?"

"It’s hard to say, just enjoy the life in front of you..."

In fact, life is rich and colorful. My favorite package is uploading pictures. Due to the slow network, I can stay in the ready workshop and CPU workshop for a long time, and I can get to know many interesting threads.

For example, last time I met the memecached thread, he told me that a lot of user data was cached through him, and it was distributed! It’s available on many machines!

I said no wonder the subsequent login operation was so much faster. It turns out that the data is no longer fetched from the database. You have it there. Oh, by the way, you are distributed. Have you been to other machines?

He said how is it possible that I can only send a GET and PUT command to that machine through the network every time to access data, and I don’t know anything else.

For example, last time I encountered a database connection thread while waiting, I learned that it also has a connection pool, which is almost exactly the same as our thread pool.

He said some packages were so perverted that he even checked a year’s worth of order data, which exhausted me to death.

I said I’ll knock you down. That’s pure data. After you pass the data to me, I have to assemble it into HTML. The workload is many times greater than yours.

He said that you must have a good relationship with memecached, get data directly from him, and make as few direct calls to the database as possible, so that our JDBC connection can live more easily.

I said yes, yes, the key is that you have to get the data to the cache in advance. Otherwise, if I ask the cache first and there is no data, don’t I still have to find you?

Life is like this, if you don’t have some fun, what’s the point?

One day I encountered a terrible thing. I almost died outside and could not return to the thread pool...

Actually, I should have been able to predict this danger, but I was too careless.

A few days ago I processed some deposit and withdrawal packages sent from http. The old thread 0x6900 specifically asked me:

"Be especially careful when handling these packages. You must obtain a lock first. You must lock the account when depositing or withdrawing money from the account, otherwise Other threads will take advantage of you while you are waiting and cause damage. I was very rough when I was young, so I took advantage of it."

In order to "scare" me, the kind 0x6900 also gave me two forms:

1. Without locking

2. Locking situation

I was horrified to see that not locking the door would cause such a serious accident.

From now on, I will be more careful when I see the packages for deposits and withdrawals. Fortunately, there have been no accidents.

A package I received today was a money transfer from a famous actor’s account to a famous director. I won’t reveal who it is, but the amount is really not small

I follow the instructions of the old thread and must lock it. First, I will lock the account of a famous actor, and then I will lock the account of a famous director.

But what I never expected was that there was another thread, yes, it was 0x7954, which was transferring money from the director to the actor at the same time.

So, this happened:

I didn’t know what was going on at first, so I kept sitting in the waiting workshop and waiting, but the waiting time was too long, as long as dozens of seconds! I've never experienced anything like this.

At this time I saw thread 0x7954, he was sitting there leisurely drinking coffee, and I started chatting with him:

“Brother, I see you have drank 8 cups of coffee, why don’t you go to work?”

"Didn't you drink 9 cups of tea?" 0x7954 replied.

“I’m waiting for a lock, but I don’t know which grandson won’t release it”

"I am also waiting for the lock. If I know which grandson will not release the lock, I will beat him to death." 0x7954 shows no weakness.

I glanced secretly, didn’t this guy hold the director’s lock that I was waiting for in his arms?

Obviously, 0x7954 also spotted me holding the lock he was waiting for.

Soon the two of us started to quarrel, refusing to give in to each other :

"Give me your lock first and let me finish it first"

"No, I always release the lock after finishing the work. I definitely can't give it to you now"

From quarrel to fight, it only takes a few seconds.

More importantly, the two of us not only hold the lock of this famous director and actor, but also have many other locks, resulting in more and more waiting threads, and the room is packed with people watching.

Things really got big in the end, and the ultimate boss "Operating System", which I have never seen before, also came.

The Big Boss is well-informed after all. He took one look at it, snorted, and said disdainfully:

"Deadlock occurs again"

"You two want to kill one of them, come on, come and draw lots"

This moment scared me to the point of peeing. It’s so serious!

I drew the lot cautiously, opened it and saw that it was the word "living".

Alas, my life was finally saved.

After poor 0x7954 was forced to hand over all his resources, he was unfortunately killed and disappeared.

I got the director’s lock and can start working.

The Big Boss operating system disappeared like a gust of wind, and only his voice came from behind:

Remember, here we are directors>actors, regardless of their acquaintance status, they must first obtain the director's lock

Since there are not only directors and actors, but also many other people, Boss left a table, which is an algorithm used to calculate the size of resources. After calculation, it will always be obtained from large to small. Lock:


I returned to the thread pool. Everyone knew about my adventure and asked me questions non-stop.

The vicious thread scheduler posted the Big Boss algorithm on the wall.

Every morning, like unscrupulous real estate agents or waiters at beauty salons, we have to stand at the door and recite loudly:

"Be sure to keep in mind when locking multiple resources. You must compare the sizes according to the boss's algorithm, and then lock them starting from the largest one."

------------------------------------------------- ----------

After many days, other threads and I discovered a strange thing: the processing of packages is getting easier and easier

No matter what package, whether it is logging in, browsing, saving money... the processing steps are the same, and a fixed html page is returned

Once I took a sneak peek and it read:

"This system will be undergoing maintenance and upgrades from 00:00 to 4:00 tonight. We are deeply sorry for the inconvenience caused to you"

I told the old thread 0x6904, he sighed and said:

"Alas, our lives have come to an end. It seems that the system will be restarted soon and we will disappear. Goodbye, brother."

The moment for system restart has finally arrived.

I saw that everything in the house was disappearing one by one. The waiting workshop, ready workshop, and even the CPU workshop were slowly disappearing.

There are fewer and fewer thread brothers around me, and finally I am the only one left.

I shouted in the open field: Is there anyone else?

No answer.

Our generation thread pool has completed its mission.

The next generation thread pool will be reborn soon.

(End)

If you have learned something from reading this article, please give me a thumbs up . If there are any errors in the article, please point it out.

Learn from each other and make progress together!

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1121387.htmlTechArticle (reposted) Interesting article: I am a thread, interesting article I am a thread from: Coder Turnaround (WeChat ID : coding) Author: IBM Liu Xin I am a thread, I was assigned a number when I was born:...
Statement
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
How do you set the session cookie parameters in PHP?How do you set the session cookie parameters in PHP?Apr 22, 2025 pm 05:33 PM

Setting session cookie parameters in PHP can be achieved through the session_set_cookie_params() function. 1) Use this function to set parameters, such as expiration time, path, domain name, security flag, etc.; 2) Call session_start() to make the parameters take effect; 3) Dynamically adjust parameters according to needs, such as user login status; 4) Pay attention to setting secure and httponly flags to improve security.

What is the main purpose of using sessions in PHP?What is the main purpose of using sessions in PHP?Apr 22, 2025 pm 05:25 PM

The main purpose of using sessions in PHP is to maintain the status of the user between different pages. 1) The session is started through the session_start() function, creating a unique session ID and storing it in the user cookie. 2) Session data is saved on the server, allowing data to be passed between different requests, such as login status and shopping cart content.

How can you share sessions across subdomains?How can you share sessions across subdomains?Apr 22, 2025 pm 05:21 PM

How to share a session between subdomains? Implemented by setting session cookies for common domain names. 1. Set the domain of the session cookie to .example.com on the server side. 2. Choose the appropriate session storage method, such as memory, database or distributed cache. 3. Pass the session ID through cookies, and the server retrieves and updates the session data based on the ID.

How does using HTTPS affect session security?How does using HTTPS affect session security?Apr 22, 2025 pm 05:13 PM

HTTPS significantly improves the security of sessions by encrypting data transmission, preventing man-in-the-middle attacks and providing authentication. 1) Encrypted data transmission: HTTPS uses SSL/TLS protocol to encrypt data to ensure that the data is not stolen or tampered during transmission. 2) Prevent man-in-the-middle attacks: Through the SSL/TLS handshake process, the client verifies the server certificate to ensure the connection legitimacy. 3) Provide authentication: HTTPS ensures that the connection is a legitimate server and protects data integrity and confidentiality.

The Continued Use of PHP: Reasons for Its EnduranceThe Continued Use of PHP: Reasons for Its EnduranceApr 19, 2025 am 12:23 AM

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

PHP and Python: Exploring Their Similarities and DifferencesPHP and Python: Exploring Their Similarities and DifferencesApr 19, 2025 am 12:21 AM

PHP and Python are both high-level programming languages ​​that are widely used in web development, data processing and automation tasks. 1.PHP is often used to build dynamic websites and content management systems, while Python is often used to build web frameworks and data science. 2.PHP uses echo to output content, Python uses print. 3. Both support object-oriented programming, but the syntax and keywords are different. 4. PHP supports weak type conversion, while Python is more stringent. 5. PHP performance optimization includes using OPcache and asynchronous programming, while Python uses cProfile and asynchronous programming.

PHP and Python: Different Paradigms ExplainedPHP and Python: Different Paradigms ExplainedApr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP and Python: A Deep Dive into Their HistoryPHP and Python: A Deep Dive into Their HistoryApr 18, 2025 am 12:25 AM

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

See all articles

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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.