


Kemahiran pembangunan coroutine tak segerak: merealisasikan penjana pautan pendek serentak tinggi
Kemahiran pembangunan coroutine tak segerak: penjana pautan pendek untuk mencapai keselarasan tinggi
Dengan pembangunan berterusan Internet, semakin banyak sumber seperti halaman web, aplikasi dan e-mel perlu dikongsi dan diakses melalui pautan. Pautan panjang biasanya menyebabkan kesulitan membaca dan menyalin, manakala pautan pendek boleh menyelesaikan masalah ini dan menjadikan pautan lebih ringkas.
Untuk memenuhi keperluan sebilangan besar pengguna untuk menjana pautan pendek pada masa yang sama, kami perlu melaksanakan penjana pautan pendek yang sangat serentak. Artikel ini akan memperkenalkan teknik pembangunan berdasarkan coroutine tak segerak untuk mencapai penjanaan pautan pendek yang cekap.
- Pengenalan kepada coroutine tak segerak
Coroutine tak segerak ialah teknologi pengaturcaraan serentak yang boleh mencapai pelaksanaan serentak tanpa sekatan dalam satu urutan. Berbanding dengan berbilang benang atau berbilang proses tradisional, coroutine tak segerak mempunyai kecekapan pelaksanaan yang lebih tinggi dan kurang overhed sistem. Model pengaturcaraan coroutine dalam Python terutamanya bergantung pada perpustakaan asyncio.
- Asynchronous HTTP Client
Untuk menjana pautan pendek, kami perlu memanggil perkhidmatan penjanaan pautan pendek melalui permintaan HTTP. Di sini, kita boleh menggunakan klien HTTP tak segerak untuk melaksanakan permintaan HTTP yang sangat serentak.
Berikut ialah contoh kod klien HTTP tak segerak yang dilaksanakan menggunakan perpustakaan aiohttp:
import aiohttp import asyncio async def fetch(session, url): async with session.get(url) as response: return await response.text() async def main(): async with aiohttp.ClientSession() as session: tasks = [] for i in range(10): # 假设需要生成10个短链接 url = 'http://shortlink-service.com/generate' # 短链接生成服务的URL task = asyncio.ensure_future(fetch(session, url)) tasks.append(task) responses = await asyncio.gather(*tasks) print(responses) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main())
Dalam kod di atas, kami mentakrifkan fungsi ambil untuk menghantar permintaan HTTP GET dan mengembalikan kandungan respons. Dalam fungsi utama, kami mencipta sesi klien HTTP tak segerak dan menggunakan gelung for untuk mencipta 10 tugas tak segerak Setiap tugas akan memanggil fungsi ambil untuk menghantar permintaan HTTP. Akhir sekali, kami menggunakan fungsi asyncio.gather untuk menunggu semua tugasan selesai dan mencetak semua kandungan respons.
- Penjana pautan pendek
Kini kami boleh menggabungkan coroutine tak segerak dan klien HTTP tak segerak untuk melaksanakan penjana pautan pendek konkurensi tinggi. Katakan kita perlu menjana 1000 pautan pendek, berikut ialah kod sampel yang dipermudahkan:
import aiohttp import asyncio async def fetch(session, url, long_url): async with session.get(url, params={'long_url': long_url}) as response: return await response.text() async def generate_short_links(long_urls): async with aiohttp.ClientSession() as session: tasks = [] for long_url in long_urls: url = 'http://shortlink-service.com/generate' # 短链接生成服务的URL task = asyncio.ensure_future(fetch(session, url, long_url)) tasks.append(task) responses = await asyncio.gather(*tasks) return responses if __name__ == '__main__': long_urls = ['http://example.com'] * 1000 # 假设有1000个长链接 loop = asyncio.get_event_loop() short_links = loop.run_until_complete(generate_short_links(long_urls)) print(short_links)
Dalam kod di atas, kami mentakrifkan fungsi generate_short_links untuk menjana pautan pendek. Fungsi ini menerima senarai pautan panjang sebagai parameter dan kemudian menggunakan klien HTTP tak segerak untuk menghantar permintaan HTTP GET untuk memanggil perkhidmatan penjanaan pautan pendek. Akhir sekali, kami menggunakan fungsi asyncio.gather untuk menunggu semua tugasan selesai dan mengembalikan semua kandungan respons.
Dengan contoh kod di atas, kami telah melaksanakan penjana pautan pendek berkonkurensi tinggi. Dengan menggunakan coroutine tak segerak dan klien HTTP tak segerak, kami boleh menjana sejumlah besar pautan pendek serentak dalam satu utas, meningkatkan keupayaan serentak sistem dan kelajuan tindak balas.
Ringkasan:
Artikel ini memperkenalkan teknik pembangunan berdasarkan coroutine tak segerak untuk melaksanakan penjana pautan pendek konkurensi tinggi. Kami menggunakan klien HTTP tak segerak untuk menghantar permintaan HTTP dan menggunakan pustaka asyncio untuk melaksanakan coroutine tak segerak. Melalui reka bentuk konkurensi yang munasabah, kami boleh meningkatkan prestasi dan kelajuan tindak balas sistem dan memenuhi keperluan sebilangan besar pengguna untuk menjana pautan pendek pada masa yang sama.
Atas ialah kandungan terperinci Kemahiran pembangunan coroutine tak segerak: merealisasikan penjana pautan pendek serentak tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Terdapat hubungan ibu bapa-anak antara fungsi dan goroutine dalam Go Gooutine induk mencipta goroutine kanak-kanak, dan goroutine kanak-kanak boleh mengakses pembolehubah goroutine induk tetapi bukan sebaliknya. Buat goroutine kanak-kanak menggunakan kata kunci go, dan goroutine kanak-kanak dilaksanakan melalui fungsi tanpa nama atau fungsi bernama. Goroutine induk boleh menunggu goroutine anak selesai melalui penyegerakan.WaitGroup untuk memastikan program tidak keluar sebelum semua goroutine kanak-kanak selesai.

Concurrency dan coroutine digunakan dalam reka bentuk GoAPI untuk: Pemprosesan berprestasi tinggi: Memproses berbilang permintaan serentak untuk meningkatkan prestasi. Pemprosesan tak segerak: Gunakan coroutine untuk memproses tugas (seperti menghantar e-mel) secara tidak segerak, melepaskan utas utama. Pemprosesan strim: Gunakan coroutine untuk memproses strim data dengan cekap (seperti bacaan pangkalan data).

Coroutine ialah konsep abstrak untuk melaksanakan tugas secara serentak, dan goroutine ialah fungsi benang ringan dalam bahasa Go yang melaksanakan konsep coroutine. Kedua-duanya berkait rapat, tetapi penggunaan sumber goroutine lebih rendah dan diuruskan oleh penjadual Go. Goroutine digunakan secara meluas dalam pertempuran sebenar, seperti memproses permintaan web secara serentak dan meningkatkan prestasi program.

Kitaran hayat coroutine Go boleh dikawal dengan cara berikut: Buat coroutine: Gunakan kata kunci go untuk memulakan tugas baharu. Tamatkan coroutine: tunggu semua coroutine selesai, gunakan sync.WaitGroup. Gunakan isyarat penutup saluran. Gunakan konteks konteks.Konteks.

Untuk sistem konkurensi tinggi, rangka kerja Go menyediakan mod seni bina seperti mod saluran paip, mod kumpulan Goroutine dan mod baris gilir mesej. Dalam kes praktikal, tapak web konkurensi tinggi menggunakan proksi Nginx, gerbang Golang, kumpulan Goroutine dan pangkalan data untuk mengendalikan sejumlah besar permintaan serentak. Contoh kod menunjukkan pelaksanaan kumpulan Goroutine untuk mengendalikan permintaan masuk. Dengan memilih corak dan pelaksanaan seni bina yang sesuai, rangka kerja Go boleh membina sistem konkurensi tinggi berskala dan sangat serentak.

Dalam senario konkurensi tinggi, mengikut ujian penanda aras, prestasi rangka kerja PHP ialah: Phalcon (RPS2200), Laravel (RPS1800), CodeIgniter (RPS2000) dan Symfony (RPS1500). Kes sebenar menunjukkan bahawa rangka kerja Phalcon mencapai 3,000 pesanan sesaat semasa acara Double Eleven di tapak web e-dagang.

Pengaturcaraan Serentak dan Tak Segerak Pengaturcaraan serentak berurusan dengan berbilang tugas yang dilaksanakan secara serentak, pengaturcaraan tak segerak ialah sejenis pengaturcaraan serentak di mana tugasan tidak menyekat benang. asyncio ialah perpustakaan untuk pengaturcaraan tak segerak dalam python, yang membolehkan atur cara melaksanakan operasi I/O tanpa menyekat utas utama. Gelung peristiwa Teras asyncio ialah gelung peristiwa, yang memantau peristiwa I/O dan menjadualkan tugas yang sepadan. Apabila coroutine sedia, gelung acara melaksanakannya sehingga ia menunggu operasi I/O. Ia kemudian menjeda coroutine dan terus melaksanakan coroutine lain. Coroutines Coroutines ialah fungsi yang boleh menjeda dan menyambung semula pelaksanaan. Kata kunci asyncdef digunakan untuk membuat coroutine. Coroutine menggunakan kata kunci tunggu untuk menunggu operasi I/O selesai. Asas asyncio berikut

Dalam senario konkurensi tinggi pengaturcaraan berorientasikan objek, fungsi digunakan secara meluas dalam bahasa Go: Berfungsi sebagai kaedah: Fungsi boleh dilampirkan pada struktur untuk melaksanakan pengaturcaraan berorientasikan objek, mengendalikan data struktur dengan mudah dan menyediakan fungsi tertentu. Berfungsi sebagai badan pelaksanaan serentak: Fungsi boleh digunakan sebagai badan pelaksanaan goroutine untuk melaksanakan pelaksanaan tugas serentak dan meningkatkan kecekapan program. Berfungsi sebagai panggil balik: Fungsi boleh dihantar sebagai parameter kepada fungsi lain dan dipanggil apabila peristiwa atau operasi tertentu berlaku, menyediakan mekanisme panggil balik yang fleksibel.
