SlideShare a Scribd company logo
From Generator to Fiber
The Road to Coroutine
in PHP
@COSCUP 2022
Albert Chen
02 Blocking and Async I/O in PHP
Outline
01 I/O Models in Linux
03 What is Generator?
04 What is Fiber in PHP 8.1?
05 How to Use Async I/O with Coroutine?
07 Q&A
06 Coroutines in Swoole
Read/Write
Read/Write
(O_NONBLOCK)
I/O Multiplexing
(select/poll/epoll)
AIO
I/O Models in Linux
Simplified Matrix of Linux I/O Models
Blocking Non-Blocking
Synchronous
Asynchronous
(https://developer.ibm.com/articles/l-async)
I/O Models in Linux
Synchronous Blocking I/O
(https://developer.ibm.com/articles/l-async)
I/O Models in Linux
Synchronous Non-Blocking I/O
(https://developer.ibm.com/articles/l-async)
I/O Models in Linux
Asynchronous Blocking I/O
(https://developer.ibm.com/articles/l-async)
I/O Models in Linux
Asynchronous Non-Blocking I/O
(https://developer.ibm.com/articles/l-async)
I/O Models in Linux
Comparison of the I/O Models
(https://rickhw.github.io/2019/02/27/ComputerScience/IO-Models)
Blocking I/O in PHP
All I/O functions in PHP are born to be synchronous
Easy for developers to understand
Less-efficient for utilization of CPU usage
sleep file_get_contents shell_exec end
Blocking I/O in PHP
1s 3s 3s
process idle
+ +
process idle process idle
7s
=
1s worker
1s worker
1s worker
Blocking I/O in PHP
If one request takes 1s in I/O waiting
Each worker can handle only one request and the same time
Concurrency in PHP depends on worker numbers
Context switch between processes are expensive!
request
request
request
Asynchronous I/O in PHP
The simplest but worst-performant solution in PHP
spatie/async package (needs pcntl and posix extensions)
Asynchronous I/O in PHP
The simplest but worst-performant solution in PHP
spatie/async package (needs pcntl and posix extensions)
worker
process process
fork
fork
Asynchronous I/O in PHP
ReactPHP
Asynchronous I/O in PHP
ReactPHP
Asynchronous I/O in PHP
Amp
Asynchronous I/O in PHP
Amp
Asynchronous I/O in PHP
Async I/O Extensions in PHP
ext-event: libevent wrapper
ext-ev: libev wrapper
ext-uv: libuv wrapper
Both ReactPHP and Amp support these extensions as

event-loop drivers
select poll epoll
Data
Structue
Array Linked List
Red–Black

Tree
Big O O(n) O(n) O(log(n))
FD Limit
1024 (x86)
2048 (x64)
Unlimited Unlimited
Asynchronous I/O in PHP
I/O Multiplexing in Linux
Asynchronous I/O in PHP
I/O Multiplexing in Linux
(http://daemonforums.org/showthread.php?t=2124)
Asynchronous I/O in PHP
Event Loop
Event Queue
Stream
Stream
Stream
Stream
Stream
Event Loop
callbacks
Asynchronous I/O in PHP
Event Loop in ReactPHP
Asynchronous I/O in PHP
Event Loop in ReactPHP
Generator
Supported since PHP 5.5
Generator provides an easy way to implement simple iterators
Generator allows you to write code that uses foreach to iterate over

a set of data without needing to build an array in memory
Generator can yield as many times as it needs to provide the values

to be iterated over
(From official PHP manual)
Generator
Reading large file with Generator
Regular Version Generator Version
(https://clouding.city/php/generator)
Generator
Generators, also known as semi-coroutines, are a subset of

coroutines
Coroutines can control where execution continues immediately

after they yield, while Generators cannot, instead transferring

control back to the generator's caller
The yield statement in a generator does not specify a coroutine

to jump to, but rather passes a value back to a parent routine
A PHP based Coroutine Scheduler needs to implemented for

stackful coroutine
(From Wikipedia)
Generators
yield iteration
Generator
two way data transfer
Two Way Data Transfer in Generator
Generator
Two Way Data Transfer in Generator
?
(https://www.npopov.com/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html)
Generator
Two Way Data Transfer in Generator
yield1
ret1
yield2
ret2
NULL
the first var_dump in gen
the var_dump of the send()
again from within gen
the return value of send()
(https://www.npopov.com/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html)
Generator
Generator in ReactPHP's Coroutine
(https://github.com/reactphp/async)
Generator
Generator in ReactPHP's Coroutine
(https://github.com/reactphp/async/blob/4.x/src/functions.php)
Generator
Generator in ReactPHP's Coroutine
(https://github.com/reactphp/async/blob/4.x/src/functions.php)
Generator
Generator in Amp's Coroutine
(https://amphp.org/http-client)
Generator
Generator in Amp's Coroutine
(https://github.com/amphp/amp/blob/master/lib/Coroutine.php)
Generator
Generator in Amp's Coroutine
(https://github.com/amphp/amp/blob/master/lib/Coroutine.php)
Generator
Both ReactPHP and Amp use Promise and Generator for Coroutine
Generators
yield promise
Event Loop
Coroutines
subscribe
send/throw
Fiber
New feature in PHP 8.1
Submitted and developed by Amp
Unlike stackless Generators, each Fiber has its own call stack,

allowing them to be paused within deeply nested function calls
Execution may be interrupted anywhere in the call stack using

Fiber::suspend()
Once suspended, execution of the fiber may be resumed with any

value using Fiber::resume()
(From official PHP manual)
Fiber
Execution in Fiber
(https://php.watch/versions/8.1/fibers)
Sequential Fiber
Fiber
Fiber Class
Fiber
Basic Usage
?
Fiber
Basic Usage
fiber start
fiber suspend
fiber continue
done
the first echo in fiber
value from fiber suspend
value from fiber resume
end message
Fiber
Basic Usage
?
Fiber
Basic Usage
start fiber 1
end fiber 1
start fiber 2
end fiber 2
done
block here
block here
Fiber
Fibers don't make Blocking code
become Non-Blocking magically!
Fiber
Basic Usage
?
Fiber
Basic Usage
fiber start
0
1
2
3
.........
fiber never suspends
Fiber
Fibers only support Cooperative Scheduling
for I/O-bound tasks
Fiber
Fiber in ReactPHP
(https://github.com/reactphp/async#async)
Fiber
Fiber in ReactPHP
(https://github.com/reactphp/async/blob/4.x/src/functions.php)
Fiber
Fiber in ReactPHP
(https://github.com/reactphp/async/blob/4.x/src/functions.php)
Fiber
Fiber in Amp
(https://github.com/amphp/http-client/blob/v5/examples/concurrency/1-concurrent-fetch.php)
Fiber
Fiber in Amp
(https://github.com/amphp/amp/blob/v3/src/functions.php)
Fiber
Fiber in Amp
(https://github.com/revoltphp/event-loop/blob/main/src/EventLoop/FiberLocal.php)
Fiber
Both ReactPHP and amp(v3 beta) support Fiber now
A comprehensive coroutine rather than semi-coroutine
Eliminates yield statement for coroutines
Fiber doesn't turn your code into Non-Blocking magically, traditional

blocking code has to be rewritten with asynchronous I/O
Help not too much for most of developers
Fiber provides only bare minimum required to allow user code to

implement full-stack coroutines in PHP
Fiber doesn't support Preemptive Scheduling yet
Coroutine in Swoole
Basic Usage
?
Coroutine in Swoole
Basic Usage
start coro 1
start to resume 1 @1
resume coro 1 @1
start to resume 1 @2
resume coro 1 @2
main
Coroutine in Swoole
Coroutine for Blocking I/O
?
Coroutine in Swoole
Coroutine for Blocking I/O
coroutine start
xxx.xxx.xxx.xxx
coroutine end
main
block here
Coroutine in Swoole
Coroutine for Blocking I/O
?
Coroutine in Swoole
Coroutine for Blocking I/O
coroutine start
main
xxx.xxx.xxx.xxx
coroutine end
auto yield
auto resume
Coroutine in Swoole
Preemptive Scheduling
?
Coroutine in Swoole
Preemptive Scheduling
infinite loop
Coroutine in Swoole
Preemptive Scheduling
?
Coroutine in Swoole
Fatal error: Uncaught Exception:
12.5ms end in xxx
Stack trace:
#0 {main}
thrown in xxx
Preemptive Scheduling
Coroutine in Swoole
Channel
?
Coroutine in Swoole
Channel
[coroutine 3]
int(0)
[coroutine 2] - 0
[coroutine 3]
int(1)
[coroutine 2] - 1
[coroutine 3]
......
second coroutine
second coroutine
second coroutine
popped value
popped value
first coroutine
first coroutine
Coroutine in Swoole
Swoole implements its full coroutine features
Built-in Blocking I/O functions can be replaced to Non-Blocking I/O

automatically if hook flags are set
Swoole supports Preemptive Scheduling for CPU-bound tasks
Swoole Provides CSP Model for Coroutine Communications like in

GoLang
Yields and resumes take place behind the scenes for I/O functions

switching
Questions
What's the difference between Asynchronous and Coroutine?
What's the difference between Generator and Fiber?
How to turn Blocking I/O stream turning into Non-Blocking?
What is Event Loop? Is it required for Asynchronous?
What's the benefits of Coroutine?
Is Asynchronous a must for Coroutine?
How to make built-in Blocking I/O functions Asynchronous?
Can Asynchronous I/O be integrated with traditional Blocking I/O

environment? (e.g. PHP-FPM)
Q&A

More Related Content

What's hot

Asynchronous JavaScript Programming
Asynchronous JavaScript ProgrammingAsynchronous JavaScript Programming
Asynchronous JavaScript Programming
Haim Michael
 
"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy
Fwdays
 
Networking in Java with NIO and Netty
Networking in Java with NIO and NettyNetworking in Java with NIO and Netty
Networking in Java with NIO and Netty
Constantine Slisenka
 
Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018
Roman Elizarov
 
Swoole Love PHP
Swoole Love PHPSwoole Love PHP
Swoole Love PHP
Yi-Feng Tzeng
 
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 EditionGoing Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Soroush Dalili
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host header
Sergey Belov
 
HTTP Request Smuggling
HTTP Request SmugglingHTTP Request Smuggling
HTTP Request Smuggling
Akash Ashokan
 
Introduction to Kotlin coroutines
Introduction to Kotlin coroutinesIntroduction to Kotlin coroutines
Introduction to Kotlin coroutines
Roman Elizarov
 
Http request smuggling
Http request smugglingHttp request smuggling
Http request smuggling
n|u - The Open Security Community
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101
Samantha Geitz
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
NAVER D2
 
암호화 이것만 알면 된다.
암호화 이것만 알면 된다.암호화 이것만 알면 된다.
암호화 이것만 알면 된다.
KwangSeob Jeong
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
NHN FORWARD
 
Introduction to kotlin coroutines
Introduction to kotlin coroutinesIntroduction to kotlin coroutines
Introduction to kotlin coroutines
NAVER Engineering
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
Shengyou Fan
 
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
Shengyou Fan
 
InnoDB MVCC Architecture (by 권건우)
InnoDB MVCC Architecture (by 권건우)InnoDB MVCC Architecture (by 권건우)
InnoDB MVCC Architecture (by 권건우)
I Goo Lee.
 
Php
PhpPhp
Sql query patterns, optimized
Sql query patterns, optimizedSql query patterns, optimized
Sql query patterns, optimized
Karwin Software Solutions LLC
 

What's hot (20)

Asynchronous JavaScript Programming
Asynchronous JavaScript ProgrammingAsynchronous JavaScript Programming
Asynchronous JavaScript Programming
 
"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy
 
Networking in Java with NIO and Netty
Networking in Java with NIO and NettyNetworking in Java with NIO and Netty
Networking in Java with NIO and Netty
 
Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018
 
Swoole Love PHP
Swoole Love PHPSwoole Love PHP
Swoole Love PHP
 
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 EditionGoing Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host header
 
HTTP Request Smuggling
HTTP Request SmugglingHTTP Request Smuggling
HTTP Request Smuggling
 
Introduction to Kotlin coroutines
Introduction to Kotlin coroutinesIntroduction to Kotlin coroutines
Introduction to Kotlin coroutines
 
Http request smuggling
Http request smugglingHttp request smuggling
Http request smuggling
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
암호화 이것만 알면 된다.
암호화 이것만 알면 된다.암호화 이것만 알면 된다.
암호화 이것만 알면 된다.
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
Introduction to kotlin coroutines
Introduction to kotlin coroutinesIntroduction to kotlin coroutines
Introduction to kotlin coroutines
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
 
InnoDB MVCC Architecture (by 권건우)
InnoDB MVCC Architecture (by 권건우)InnoDB MVCC Architecture (by 권건우)
InnoDB MVCC Architecture (by 권건우)
 
Php
PhpPhp
Php
 
Sql query patterns, optimized
Sql query patterns, optimizedSql query patterns, optimized
Sql query patterns, optimized
 

Similar to From Generator to Fiber the Road to Coroutine in PHP

The why and how of moving to php 7
The why and how of moving to php 7The why and how of moving to php 7
The why and how of moving to php 7
Wim Godden
 
Dead-Simple Async Control Flow with Coroutines
Dead-Simple Async Control Flow with CoroutinesDead-Simple Async Control Flow with Coroutines
Dead-Simple Async Control Flow with Coroutines
Travis Kaufman
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudyYusuke Ando
 
Xdebug
XdebugXdebug
Возможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OSВозможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OS
Cisco Russia
 
The why and how of moving to php 8
The why and how of moving to php 8The why and how of moving to php 8
The why and how of moving to php 8
Wim Godden
 
The Parrot VM
The Parrot VMThe Parrot VM
The Parrot VM
François Perrad
 
Obstacles & Solutions for Livepatch Support on ARM64 Architecture
Obstacles & Solutions for Livepatch Support on ARM64 ArchitectureObstacles & Solutions for Livepatch Support on ARM64 Architecture
Obstacles & Solutions for Livepatch Support on ARM64 Architecture
LinuxCon ContainerCon CloudOpen China
 
Introduction to web and php mysql
Introduction to web and php mysqlIntroduction to web and php mysql
Introduction to web and php mysql
Programmer Blog
 
rqlite - replicating SQLite via Raft consensu
rqlite - replicating SQLite via Raft consensurqlite - replicating SQLite via Raft consensu
rqlite - replicating SQLite via Raft consensu
Philip O'Toole
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Patrick Shuff
 
Python for IoT, A return of experience
Python for IoT, A return of experiencePython for IoT, A return of experience
Python for IoT, A return of experience
Alexandre Abadie
 
Using Python for IoT: a return of experience, Alexandre Abadie
Using Python for IoT: a return of experience, Alexandre AbadieUsing Python for IoT: a return of experience, Alexandre Abadie
Using Python for IoT: a return of experience, Alexandre Abadie
Pôle Systematic Paris-Region
 
ApacheCon 2021: Apache NiFi 101- introduction and best practices
ApacheCon 2021:   Apache NiFi 101- introduction and best practicesApacheCon 2021:   Apache NiFi 101- introduction and best practices
ApacheCon 2021: Apache NiFi 101- introduction and best practices
Timothy Spann
 
Incredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and GeneratorsIncredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and Generators
dantleech
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with docker
Ruoshi Ling
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)
Fwdays
 
Understanding and building Your Own Docker
Understanding and building Your Own DockerUnderstanding and building Your Own Docker
Understanding and building Your Own Docker
Motiejus Jakštys
 
Spl in the wild - zendcon2012
Spl in the wild - zendcon2012Spl in the wild - zendcon2012
Spl in the wild - zendcon2012Elizabeth Smith
 

Similar to From Generator to Fiber the Road to Coroutine in PHP (20)

The why and how of moving to php 7
The why and how of moving to php 7The why and how of moving to php 7
The why and how of moving to php 7
 
Dead-Simple Async Control Flow with Coroutines
Dead-Simple Async Control Flow with CoroutinesDead-Simple Async Control Flow with Coroutines
Dead-Simple Async Control Flow with Coroutines
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy
 
Xdebug
XdebugXdebug
Xdebug
 
Concurrency in ruby
Concurrency in rubyConcurrency in ruby
Concurrency in ruby
 
Возможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OSВозможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OS
 
The why and how of moving to php 8
The why and how of moving to php 8The why and how of moving to php 8
The why and how of moving to php 8
 
The Parrot VM
The Parrot VMThe Parrot VM
The Parrot VM
 
Obstacles & Solutions for Livepatch Support on ARM64 Architecture
Obstacles & Solutions for Livepatch Support on ARM64 ArchitectureObstacles & Solutions for Livepatch Support on ARM64 Architecture
Obstacles & Solutions for Livepatch Support on ARM64 Architecture
 
Introduction to web and php mysql
Introduction to web and php mysqlIntroduction to web and php mysql
Introduction to web and php mysql
 
rqlite - replicating SQLite via Raft consensu
rqlite - replicating SQLite via Raft consensurqlite - replicating SQLite via Raft consensu
rqlite - replicating SQLite via Raft consensu
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
 
Python for IoT, A return of experience
Python for IoT, A return of experiencePython for IoT, A return of experience
Python for IoT, A return of experience
 
Using Python for IoT: a return of experience, Alexandre Abadie
Using Python for IoT: a return of experience, Alexandre AbadieUsing Python for IoT: a return of experience, Alexandre Abadie
Using Python for IoT: a return of experience, Alexandre Abadie
 
ApacheCon 2021: Apache NiFi 101- introduction and best practices
ApacheCon 2021:   Apache NiFi 101- introduction and best practicesApacheCon 2021:   Apache NiFi 101- introduction and best practices
ApacheCon 2021: Apache NiFi 101- introduction and best practices
 
Incredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and GeneratorsIncredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and Generators
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with docker
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)
 
Understanding and building Your Own Docker
Understanding and building Your Own DockerUnderstanding and building Your Own Docker
Understanding and building Your Own Docker
 
Spl in the wild - zendcon2012
Spl in the wild - zendcon2012Spl in the wild - zendcon2012
Spl in the wild - zendcon2012
 

Recently uploaded

Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
MdTanvirMahtab2
 
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdfGoverning Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
WENKENLI1
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
ydteq
 
space technology lecture notes on satellite
space technology lecture notes on satellitespace technology lecture notes on satellite
space technology lecture notes on satellite
ongomchris
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
Kamal Acharya
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
Aditya Rajan Patra
 
Tutorial for 16S rRNA Gene Analysis with QIIME2.pdf
Tutorial for 16S rRNA Gene Analysis with QIIME2.pdfTutorial for 16S rRNA Gene Analysis with QIIME2.pdf
Tutorial for 16S rRNA Gene Analysis with QIIME2.pdf
aqil azizi
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
zwunae
 
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTSHeap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Soumen Santra
 
CME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional ElectiveCME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional Elective
karthi keyan
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
bakpo1
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
Kamal Acharya
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
VENKATESHvenky89705
 
Unbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptxUnbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptx
ChristineTorrepenida1
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
Massimo Talia
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
Pratik Pawar
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
Osamah Alsalih
 
DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
gestioneergodomus
 

Recently uploaded (20)

Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
 
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdfGoverning Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
 
space technology lecture notes on satellite
space technology lecture notes on satellitespace technology lecture notes on satellite
space technology lecture notes on satellite
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
 
Tutorial for 16S rRNA Gene Analysis with QIIME2.pdf
Tutorial for 16S rRNA Gene Analysis with QIIME2.pdfTutorial for 16S rRNA Gene Analysis with QIIME2.pdf
Tutorial for 16S rRNA Gene Analysis with QIIME2.pdf
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
 
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTSHeap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
 
CME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional ElectiveCME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional Elective
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
 
Unbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptxUnbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptx
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
 
DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
 

From Generator to Fiber the Road to Coroutine in PHP