SlideShare a Scribd company logo
1 of 73
Download to read offline
Backpressure?
Resistance is not futile.
Jay Phelps | @_jayphelps
Jay Phelps | @_jayphelps
Jay Phelps
@_jayphelps
Senior Software Engineer
Citadel
Jay Phelps | @_jayphelps
Backpressure
Jay Phelps | @_jayphelps
A term borrowed from fluid dynamics,
like in automotive exhaust and house
plumbing.
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of fluid through pipes.”
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of fluid through pipes.”
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of fluid through pipes.”
^ data through software.
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of data through software.”
Jay Phelps | @_jayphelps
i.e. “input is coming in faster
than we can output”
Jay Phelps | @_jayphelps
Cool
Jay Phelps | @_jayphelps
…but…what is Backpressure?
Jay Phelps | @_jayphelps
Let’s start with an analogy!
Jay Phelps | @_jayphelps
I Love Lucy: Chocolate Factory
"I Love Lucy" Job Switching - 1952 - CBS
"I Love Lucy" Job Switching - 1952 - CBS
video: https://bit.ly/1eUkJgG
Jay Phelps | @_jayphelps
Lucy has Backpressure!
Jay Phelps | @_jayphelps
She tries to set them to the side
(buffering)
Jay Phelps | @_jayphelps
Then she tries eating and hiding them
(dropping)
Jay Phelps | @_jayphelps
She needs to slow down the conveyor belt
(producer control)
Jay Phelps | @_jayphelps
Let’s talk software
Jay Phelps | @_jayphelps
Reading and writing files
File Systems
Jay Phelps | @_jayphelps
Writing is slower than reading
Jay Phelps | @_jayphelps
Read: 150 MB/s
Write: 100 MB/s
Example hard drive
Jay Phelps | @_jayphelps
Example hard drive
150 MB/s - 100 MB/s = 50 MB/sdeficit
Jay Phelps | @_jayphelps
Imagine needing to read/write a 6 GB file
Example hard drive
Jay Phelps | @_jayphelps
Example hard drive
6 GB / 150 MB read = 40 seconds
Jay Phelps | @_jayphelps
Example hard drive
50 MB deficit x 40 sec = 2 GB memory!
Jay Phelps | @_jayphelps
That’s a lot of wasted memory
Jay Phelps | @_jayphelps
Solution: only read as fast as you can write
(control the producer)
Jay Phelps | @_jayphelps
Most I/O libraries do this for you, automatically
Node.js Streams is a great example
Jay Phelps | @_jayphelps
const zlib = require('zlib');
const fs = require('fs');
const gzip = zlib.createGzip();
const input = fs.createReadStream('input.txt');
const output = fs.createWriteStream('input.txt.gz');
// handles backpressure for you
input.pipe(gzip).pipe(output);
Jay Phelps | @_jayphelps
Server-to-Server Communication
A
Server
B
Server
C
Server
Jay Phelps | @_jayphelps
A
Server
B
Server
C
Server
100 rps 75 rps
Jay Phelps | @_jayphelps
A B C
Server Server Server
60 sec * 25 rps = 1,500 rpm!
100 rps 75 rps
Jay Phelps | @_jayphelps
A B C
Server Server Server
100 rps 75 rps
60 sec * 60 min * 25 rps = 90,000 rph!
Jay Phelps | @_jayphelps
Jay Phelps | @_jayphelps
Solution: control the producer (or scale up)
Jay Phelps | @_jayphelps
…unfortunately, that isn’t easy
Jay Phelps | @_jayphelps
RSocket, gRPC, etc
Jay Phelps | @_jayphelps
UI Rendering
Jay Phelps | @_jayphelps
Throttling/debouncing keyboard input
Jay Phelps | @_jayphelps
High volume WebSockets
Jay Phelps | @_jayphelps
Events are coming in faster
than we can render them
Jay Phelps | @_jayphelps
Solution: control the producer?
Jay Phelps | @_jayphelps
Is this even a good User Experience?
Jay Phelps | @_jayphelps
Performance problems are often UX problems!
Jay Phelps | @_jayphelps
Buffer or Drop/Sample?
Jay Phelps | @_jayphelps
Maybe table virtualization too?
VirtualizedNOT Virtualized vs.
Jay Phelps | @_jayphelps
Backpressure Strategies
Jay Phelps | @_jayphelps
If you can, scale up your resources
Jay Phelps | @_jayphelps
Three fundamental strategies
Jay Phelps | @_jayphelps
Control the producer
Buffer
Drop
Jay Phelps | @_jayphelps
Control the producer
slow down/speed up is decided by consumer
Jay Phelps | @_jayphelps
const source = connectToSource();
source.pull(response1 => {
console.log(response1);
// later…
source.pull(response2 => {
console.log(response2);
});
});
Jay Phelps | @_jayphelps
Controlling is usually the ideal option
but not always viable
Jay Phelps | @_jayphelps
Buffer
accumulate incoming data spikes temporarily
Jay Phelps | @_jayphelps
Be careful with unbounded buffers!
Jay Phelps | @_jayphelps
Drop
sample a percentage of the incoming data
Jay Phelps | @_jayphelps
Throttle, debounce, etc
Jay Phelps | @_jayphelps
Not always acceptable to lose data
Jay Phelps | @_jayphelps
Libraries for handling Backpressure
Jay Phelps | @_jayphelps
Probably streams, but maybe not!
Jay Phelps | @_jayphelps
Push-based streams
RxJS, Bacon.js, xstream
Jay Phelps | @_jayphelps
Push: producer is in control
Jay Phelps | @_jayphelps
Pull-based streams
Node.js Streams, Web Streams, Async Iterators, IxJS
Jay Phelps | @_jayphelps
Pull: consumer is in control
Jay Phelps | @_jayphelps
It’s not unusual to use both push
and pull streams in the same app
Jay Phelps | @_jayphelps
“Resistance opposing the
desired flow of data through software.”
Jay Phelps | @_jayphelps
i.e. “input is coming in faster
than we can output”
Jay Phelps | @_jayphelps
Control the producer
Buffer
Drop
Jay Phelps | @_jayphelps
Thanks!
@_jayphelps

More Related Content

More from Jay Phelps

Why I Love JSX!
Why I Love JSX!Why I Love JSX!
Why I Love JSX!Jay Phelps
 
ES2015 and Beyond
ES2015 and BeyondES2015 and Beyond
ES2015 and BeyondJay Phelps
 
Intro to Ember CLI
Intro to Ember CLIIntro to Ember CLI
Intro to Ember CLIJay Phelps
 
Ember Overview in 5 Minutes
Ember Overview in 5 MinutesEmber Overview in 5 Minutes
Ember Overview in 5 MinutesJay Phelps
 
Profit From Your Media Library Using Multi-Platform Distribution
Profit From Your Media Library Using Multi-Platform DistributionProfit From Your Media Library Using Multi-Platform Distribution
Profit From Your Media Library Using Multi-Platform DistributionJay Phelps
 
Intro to Ember.js
Intro to Ember.jsIntro to Ember.js
Intro to Ember.jsJay Phelps
 

More from Jay Phelps (6)

Why I Love JSX!
Why I Love JSX!Why I Love JSX!
Why I Love JSX!
 
ES2015 and Beyond
ES2015 and BeyondES2015 and Beyond
ES2015 and Beyond
 
Intro to Ember CLI
Intro to Ember CLIIntro to Ember CLI
Intro to Ember CLI
 
Ember Overview in 5 Minutes
Ember Overview in 5 MinutesEmber Overview in 5 Minutes
Ember Overview in 5 Minutes
 
Profit From Your Media Library Using Multi-Platform Distribution
Profit From Your Media Library Using Multi-Platform DistributionProfit From Your Media Library Using Multi-Platform Distribution
Profit From Your Media Library Using Multi-Platform Distribution
 
Intro to Ember.js
Intro to Ember.jsIntro to Ember.js
Intro to Ember.js
 

Recently uploaded

PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 

Recently uploaded (20)

PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 

Backpressure? Resistance is not futile. (Uphill Conf 2019)

  • 1. Backpressure? Resistance is not futile. Jay Phelps | @_jayphelps
  • 2. Jay Phelps | @_jayphelps Jay Phelps @_jayphelps Senior Software Engineer Citadel
  • 3. Jay Phelps | @_jayphelps Backpressure
  • 4. Jay Phelps | @_jayphelps A term borrowed from fluid dynamics, like in automotive exhaust and house plumbing.
  • 5. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of fluid through pipes.”
  • 6. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of fluid through pipes.”
  • 7. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of fluid through pipes.” ^ data through software.
  • 8. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of data through software.”
  • 9. Jay Phelps | @_jayphelps i.e. “input is coming in faster than we can output”
  • 10. Jay Phelps | @_jayphelps Cool
  • 11. Jay Phelps | @_jayphelps …but…what is Backpressure?
  • 12. Jay Phelps | @_jayphelps Let’s start with an analogy!
  • 13. Jay Phelps | @_jayphelps I Love Lucy: Chocolate Factory
  • 14. "I Love Lucy" Job Switching - 1952 - CBS "I Love Lucy" Job Switching - 1952 - CBS video: https://bit.ly/1eUkJgG
  • 15. Jay Phelps | @_jayphelps Lucy has Backpressure!
  • 16. Jay Phelps | @_jayphelps She tries to set them to the side (buffering)
  • 17. Jay Phelps | @_jayphelps Then she tries eating and hiding them (dropping)
  • 18. Jay Phelps | @_jayphelps She needs to slow down the conveyor belt (producer control)
  • 19. Jay Phelps | @_jayphelps Let’s talk software
  • 20. Jay Phelps | @_jayphelps Reading and writing files File Systems
  • 21. Jay Phelps | @_jayphelps Writing is slower than reading
  • 22. Jay Phelps | @_jayphelps Read: 150 MB/s Write: 100 MB/s Example hard drive
  • 23. Jay Phelps | @_jayphelps Example hard drive 150 MB/s - 100 MB/s = 50 MB/sdeficit
  • 24. Jay Phelps | @_jayphelps Imagine needing to read/write a 6 GB file Example hard drive
  • 25. Jay Phelps | @_jayphelps Example hard drive 6 GB / 150 MB read = 40 seconds
  • 26. Jay Phelps | @_jayphelps Example hard drive 50 MB deficit x 40 sec = 2 GB memory!
  • 27. Jay Phelps | @_jayphelps That’s a lot of wasted memory
  • 28. Jay Phelps | @_jayphelps Solution: only read as fast as you can write (control the producer)
  • 29. Jay Phelps | @_jayphelps Most I/O libraries do this for you, automatically Node.js Streams is a great example
  • 30. Jay Phelps | @_jayphelps const zlib = require('zlib'); const fs = require('fs'); const gzip = zlib.createGzip(); const input = fs.createReadStream('input.txt'); const output = fs.createWriteStream('input.txt.gz'); // handles backpressure for you input.pipe(gzip).pipe(output);
  • 31. Jay Phelps | @_jayphelps Server-to-Server Communication
  • 33. A Server B Server C Server 100 rps 75 rps Jay Phelps | @_jayphelps
  • 34. A B C Server Server Server 60 sec * 25 rps = 1,500 rpm! 100 rps 75 rps Jay Phelps | @_jayphelps
  • 35. A B C Server Server Server 100 rps 75 rps 60 sec * 60 min * 25 rps = 90,000 rph! Jay Phelps | @_jayphelps
  • 36. Jay Phelps | @_jayphelps Solution: control the producer (or scale up)
  • 37. Jay Phelps | @_jayphelps …unfortunately, that isn’t easy
  • 38. Jay Phelps | @_jayphelps RSocket, gRPC, etc
  • 39. Jay Phelps | @_jayphelps UI Rendering
  • 40. Jay Phelps | @_jayphelps Throttling/debouncing keyboard input
  • 41. Jay Phelps | @_jayphelps High volume WebSockets
  • 42.
  • 43.
  • 44. Jay Phelps | @_jayphelps Events are coming in faster than we can render them
  • 45. Jay Phelps | @_jayphelps Solution: control the producer?
  • 46. Jay Phelps | @_jayphelps Is this even a good User Experience?
  • 47. Jay Phelps | @_jayphelps Performance problems are often UX problems!
  • 48. Jay Phelps | @_jayphelps Buffer or Drop/Sample?
  • 49. Jay Phelps | @_jayphelps Maybe table virtualization too?
  • 51. Jay Phelps | @_jayphelps Backpressure Strategies
  • 52. Jay Phelps | @_jayphelps If you can, scale up your resources
  • 53. Jay Phelps | @_jayphelps Three fundamental strategies
  • 54. Jay Phelps | @_jayphelps Control the producer Buffer Drop
  • 55. Jay Phelps | @_jayphelps Control the producer slow down/speed up is decided by consumer
  • 56. Jay Phelps | @_jayphelps const source = connectToSource(); source.pull(response1 => { console.log(response1); // later… source.pull(response2 => { console.log(response2); }); });
  • 57. Jay Phelps | @_jayphelps Controlling is usually the ideal option but not always viable
  • 58. Jay Phelps | @_jayphelps Buffer accumulate incoming data spikes temporarily
  • 59. Jay Phelps | @_jayphelps Be careful with unbounded buffers!
  • 60. Jay Phelps | @_jayphelps Drop sample a percentage of the incoming data
  • 61. Jay Phelps | @_jayphelps Throttle, debounce, etc
  • 62. Jay Phelps | @_jayphelps Not always acceptable to lose data
  • 63. Jay Phelps | @_jayphelps Libraries for handling Backpressure
  • 64. Jay Phelps | @_jayphelps Probably streams, but maybe not!
  • 65. Jay Phelps | @_jayphelps Push-based streams RxJS, Bacon.js, xstream
  • 66. Jay Phelps | @_jayphelps Push: producer is in control
  • 67. Jay Phelps | @_jayphelps Pull-based streams Node.js Streams, Web Streams, Async Iterators, IxJS
  • 68. Jay Phelps | @_jayphelps Pull: consumer is in control
  • 69. Jay Phelps | @_jayphelps It’s not unusual to use both push and pull streams in the same app
  • 70. Jay Phelps | @_jayphelps “Resistance opposing the desired flow of data through software.”
  • 71. Jay Phelps | @_jayphelps i.e. “input is coming in faster than we can output”
  • 72. Jay Phelps | @_jayphelps Control the producer Buffer Drop
  • 73. Jay Phelps | @_jayphelps Thanks! @_jayphelps