SlideShare a Scribd company logo
1 of 134
Download to read offline
Here comes the Loom
Here comes the Loom
the concurrency will never be the same again
whoami
whoami
Krystian Zybała
Principal Java Engineer / Java Performance Engineer
Linkedin:
Twitter:
Blog:
https://www.linkedin.com/in/krystian-zybala/
https://twitter.com/k_zybala
https://kzybala.pl
— Phil Karlton
There are only two hard things in Computer Science: cache invalidation and naming things.
— Herb Sutter
The Free Lunch is Over: A Fundamental Turn Toward Concurrency in Software
Motivation
Motivation
Motivation
Motivation
Resource problem
Scalability
Efficiency
Technologies
Technologies
Concurrency for I/O
Concurrency for I/O
Concurrency vs Parallelism
Concurrency vs Parallelism
Concurrency
Concurrency
Throughput (task/time unit) Schedule multiple largely independent tasks to set of computational
resources
Parallelism
Parallelism
latency (time unit) Speed up a task by splitting to sub-tasks and exploiting multiple processing unit
Reactive approach
Reactive approach
Every thread in the JVM is just a thin wrapper
Every thread in the JVM is just a thin wrapper
around an OS thread
around an OS thread
OS allocates a large amount of memory megabytes in the stack to store thread context, native, Java
call stack, etc.
— thread-per-task-model
Way to write concurrent programs in create new a thread for every task
JEPs
JEPs
JEP-425 Virtual Threads (preview)
JEP-248 Structured Concurrency
JEP-444 Virtual Threads
Thread
Thread
A thread is an abstraction
A thread is an abstraction
Thread
Thread
Unit of work
Requires a lot of resources
Too less them
Hard to mange (Reactive toys)
Not enough knowledge
Lazy programmers
Mapping
Mapping
HTTP Server 1 request = 1 thread
Database Server 1 transaction = 1 thread
Project Loom
Project Loom
Threads
Threads
Platform
Carrier
Virtual
Platform Thread
Platform Thread
~1ms to schedule
Big memory consumption
Expensive
OS Thread
Task-switching requires switch to kernel: ~100µs (depends on the OS)
Scheduling is a compromise for all usages. Bad cache locality
Carrier thread
Carrier thread
How many as cores
Carrier thread is the same as platform thread
Fork/Join pool
Virtual thread
Virtual thread
ThreadLighter threads
Less memory usage
Fastest blocking code*
No more platform threads is not GC root
CPU cache misses are possible
Pay-as-you-go stacks (size 200-300 bytes) stored in a heap
Scales to 1M+ on commodity hardware
Clean stack traces
Your old code just works
Readable sequential code
The natural unit of scheduling for operating systems
Virtual thread is cheap
Virtual thread is cheap
Cheap to create
Cheap to destroy
Cheap to block
Virtual thread purpose
Virtual thread purpose
mostly intended to write I/O application
servers
message brokers
higher concurrency if system needs additional resources for concurrency
available connections in a connection pool
sufficient memory to serve the increased load
increase efficiency for short cycle tasks
Virtual thread is not for
Virtual thread is not for
The non-realtime kernels primarily employ time-sharing when the CPU is at 100%
Run for a long time computation *
CPU bound tasks *
Virtual threads are not an execution resource, but a business logic object like a string.
Code
Code
final Thread platformThread = Thread
.ofPlatform()
.unstarted(() -> System.out.println("Hello from " + Thread.currentThread()));
final Thread virtualThread = Thread
.ofVirtual()
.unstarted(() -> System.out.println("Hello from " + Thread.currentThread()));
Hello from Thread[#22,Thread-0,5,main]
Hello from VirtualThread[#23]/runnable@ForkJoinPool-1-worker-1
Fast forward to today
Fast forward to today
Virtual thread = user mode thread
Scheduled by JVM, not OS
Virtual thread is a instance of java.lang.Thread
Platform thread is instance of java.lang.Thread but implemented by “traditional way”, thin wrapper
around OS thread
How are virtual threads implemented?
How are virtual threads implemented?
How are virtual threads implemented?
How are virtual threads implemented?
Built on continuations, as lower construct of VM
Wraps a task in continuation
FIFO mode
M:N thread model
The virtual thread is not an atomic construct, but a composition of two concerns — a scheduler
and a continuation…​
Delimited Continuous with Scheduler
Delimited Continuous with Scheduler
Delimited Continuous with Scheduler
Delimited Continuous with Scheduler
The ability to manipulate call stacks to the JVM will undoubtedly be required
Scheduler
Scheduler
Scheduler
Scheduler
A scheduler assigns continuations to CPU cores, replacing a paused one with another that’s ready to
run, and ensuring that a continuation that is ready to resume will eventually be assigned to a CPU
core.
VH wraps a task in a continuation
VH wraps a task in a continuation
Continuation
Continuation
Continuation
Continuation
Call-stack context
May suspend itself
May be resumed by caller
Must be “stateful”
Non-reentrant
Copy terminology
Copy terminology
Freeze: Suspend a continuation and unmount it by copying frames from OS thread stack →
continuation object
Thaw: Mount a suspended continuation by copying frames from continuation object → OS thread
stack
Freez (copy)
Freez (copy)
Thaw (yield)
Thaw (yield)
private static void enter(Continuation c, boolean isContinue) {
// This method runs in the "entry frame".
// A yield jumps to this method's caller as if returning from this method.
try {
c.enter0();
} finally {
c.finish();
}
}
private void enter0() {
target.run();
}
Tail-call elimination
Tail-call elimination
Tail-call elimination
Tail-call elimination
The core idea is that the system will be able to avoid allocating new stacks for continuations wherever
possible
How they are scheduled?
How they are scheduled?
Virtual thread scheduling is already
Virtual thread scheduling is already
preemptive*
preemptive*
Fork Join Pool
Fork Join Pool
Fairness
Fairness
Good practices
Good practices
Don’t pool virtual threads
Don’t pool virtual threads
Try to not use synchronized
Try to not use synchronized *
*
What is a blocking operation?
What is a blocking operation?
What is a blocking operation?
What is a blocking operation?
I/O
Thread (Thread.sleep)
Other operation on thread
Blocking code is
Blocking code is OK
OK
but but but…​
but but but…​
Is there any problem?
Synchronized
Synchronized
Synchronized
Synchronized
The synchronized block doesn’t work well with VT
Pinning
Pinning
Pinning
Pinning
When it executes code inside a synchronized block or method;
When it calls a native method or a foreign function(FFM)*
Libraries don’t support it well*
Libraries don’t support it well*
Thread local
Thread local
Scope Values
Scope Values
ScopedValue<User> KEY = ScopedValue.newInstance();
Runnable task = () -> {
if (KEY.isBound()) {
return userProvider.fetchUser(KEY.get());
} return null;
};
ScopedValue.where(KEY, 1).run(task);
ScopedValue.where(KEY, 1).call(() -> doSomething());
// or
ScopedValue.where(KEY, 2, task);
I/O
I/O
The java.nio.channels classes — SocketChannel, ServerSocketChannel and DatagramChannel — were
retrofitted to become virtual-thread-friendly. When their synchronous operations, such as read and
write, are performed on a virtual thread, only non-blocking I/O is used under the covers
"Old" I/O networking — java.net.Socket, ServerSocket and DatagramSocket — has been
reimplemented in Java on top of NIO, so it immediately benefits from NIO’s virtual-thread-
friendliness
DNS lookups by the getHostName, getCanonicalHostName, getByName methods of
java.net.InetAddress (and other classes that use them) are still delegated to the operating system,
which only provides a OS-thread-blocking API. Alternatives are being explored
I/O
I/O
Process pipes will similarly be made virtual-thread-friendly, except maybe on Windows, where this
requires a greater effort
Console I/O has also been retrofitted. Http(s)URLConnection and the implementation of TLS/SSL
were changed to rely on j.u.c locks and avoid pinning.
File I/O is problematic. Internally, the JDK uses buffered I/O for files, which always reports available
bytes even when a read will block. On Linux, we plan to use io_uring for asynchronous file I/O, and in
the meantime we’re using the ForkJoinPool.ManagedBlocker mechanism to smooth over blocking file
I/O operations by adding more OS threads to the worker pool when a worker is blocked.
Profiling
Profiling
Async Profiler
Async Profiler
bool JfrThreadSampleClosure::sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
// Process the oops in the thread head before calling into code that wants to
// stack walk over Loom continuations. The stack walking code will otherwise
// skip frames in stack chunks on the Java heap.
StackWatermarkSet::start_processing(thread, StackWatermarkKind::gc);
OSThreadSampler sampler(thread, *this, frames, max_frames);
sampler.take_sample();
}
https://github.com/openjdk/jdk/blob/d0761c19d1ddafbcb5ea97334335462e716de250/src/hotspot/share/jfr/
if (Continuation::is_return_barrier_entry(sender_pc)) {
// If our sender_pc is the return barrier, then our "real" sender is the continuation entry
frame s = Continuation::continuation_bottom_sender(thread, *this, sender_sp);
sender_sp = s.sp();
sender_pc = s.pc();
}
https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/hotspot/cpu/x86/frame_x86.cpp#L158
— Andrei Pangin
Async-profiler works on the native threads level. Reconstruction of virtual stack traces is not its
goal at this point.
It makes async-profiler essentially incompatible with loom. If the problem was limited to
reconstruction of the chain of deliberately launched structured concurrency scopes, that would
probably not be an issue for most applications, but if any potentially yielding method can be
yanked onto a random carrier thread without any stack history, the flame graphs will be very
hard to interpret.
JFR
JFR
JFR
JFR
java -Djdk.tracePinnedThreads=full/short
Structure Concurrency
Structure Concurrency
Structured concurrency treats groups of related tasks running in different threads as a single unit
of work, thereby streamlining error handling and cancellation, improving reliability, and
enhancing observability.
Before JDK21
Before JDK21
Response handle() throws ExecutionException, InterruptedException {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Future<String> user = scope.fork(() -> findUser());
Future<Integer> order = scope.fork(() -> fetchOrder());
scope.join(); // Join both forks
scope.throwIfFailed(); // ... and propagate errors
// Here, both forks have succeeded, so compose their results
return new Response(user.resultNow(), order.resultNow());
}
}
JDK21
JDK21
Response handle() throws ExecutionException, InterruptedException {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
java.util.concurrent.StrucutredTaskScope.SubTask<String> user = scope.fork(() -> findUser());
java.util.concurrent.StrucutredTaskScope.SubTask<Integer> order = scope.fork(() -> fetchOrder());
scope.join(); // Join both forks
scope.throwIfFailed(); // ... and propagate errors
// user.state(); UNAVAILABLE, SUCCESS, FAILED
// user.exception();
// user.task(); Callable<? extends T>
// Here, both forks have succeeded, so compose their results
return new Response(user.get(), order.get());
}
}
Virtual thread stack
Virtual thread stack
How to get stack trace?
How to get stack trace?
jcmd <pid> JavaThread.dump -format=json <file>
GC
GC
Project Synergies
Project Synergies
Data more local than ever
Less reason to manually share data across thread pools
Same data no are private in per request model
GC when thread terminates
The Virtual thread stack objet itself is thread-local
Time-slice based preemption
Time-slice based preemption
A kernel thread that computes for a while without blocking on IO or synchronization will be
forcefully-preempted after some time.
If many fibers require so much CPU time that they need to often be forcefully preempted then as the number of threads exceeds the number of
JDBC can’t rely on threads anymore
JDBC can’t rely on threads anymore
— Cay Hostmann
Tasks, not thread
Benchmarks
Benchmarks
Jackson
Jackson
Benchmark Mode Cnt Score Error Units
serialize_object_platform_thread avgt 25 64.266 ± 10.300 ms/op
serialize_object_virtual_thread avgt 25 238.299 ± 121.981 ms/op
Kryo
Kryo
Benchmark Mode Cnt Score Error Units
serialize_object_platform_thread avgt 25 0.6556173 ± 0.104847 ms/op
serialize_object_virtual_thread avgt 25 1.044487 ± 0.075430 ms/op
Avro
Avro
Benchmark Mode Cnt Score Error Units
serialize_object_platform_thread avgt 25 0.112802 ± 0.002340 ms/op
serialize_object_virtual_thread avgt 25 0.113031 ± 0.004064 ms/op
Benefit
Benefit
Simple switch to VT makes 3x performance boost in I/O app
Future work
Future work
BlockingQueue
Structured Concurrency
use io_uring for asynchronous file I/O
Object.wait()
Concurrent Collections review
Takeaways
Takeaways
Nothing is changed 😃
A virtual thread is a java.lang.Thread — in code, at runtime, in the debugger and in the profiler
Lighter threads
Pay-as-you-go stacks (size 200-300 bytes) stored in a heap
Scales to 1M+ on commodity hardware
Clean stack traces
Your old code just works
Readable sequential code
Takeaways
Takeaways
The natural unit of scheduling for operating systems
Clean stack traces
A virtual thread is not a wrapper around an OS thread, but a Java entity.
Creating a virtual thread is cheap — have millions, and don’t pool them!
Blocking a virtual thread is cheap — be synchronous!
No language changes are needed.
Pluggable schedulers offer the flexibility of asynchronous programming.
What we have to do?
What we have to do?
Nothing
Nothing
Joke
Joke
You only need to change a thread pool to:
java.util.concurrent.Executors#newVirtualThreadPerTaskExecutor
not too fast
not too fast
Any problems?
Problems
Problems
Custom Carrier Thread Pool
Virtual Thread Hang
Synchronized
Parks in scheduler
-Djdk.tracePinnedThreads
Thread.yield() < JDK20
tracePinnedThreads
tracePinnedThreads
It has a probability of causing the application to hang
java -Djdk.tracePinnedThreads
VT hang
VT hang
Virtual thread is being scheduled preemptively*** not cooperatively?
VT hang
VT hang
This means that the runtime makes the decision when to de-schedule (preempt) one thread and
schedule another to cooperation from user code
Concurrent Hash Map
Concurrent Hash Map
Map<Integer, Integer> map = new ConcurrentHashMap<>();
for (int i = 0; i < 1_000; i++) {
int finalI = i;
Thread.startVirtualThread(() ->
map.computeIfAbsent(finalI % 3, key -> {
try {
Thread.sleep(2_000);
} catch (InterruptedException e) {
throw new CancellationException("interrupted");
}
return finalI;
}));
}
long time = System.nanoTime();
try {
Th d t tVi t lTh d(() >S t t i tl ("Hi I' i t i t l th d"))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
— ConcurrentHashMap#computeIfAbsent
Some attempted update operations on this map by other threads may be blocked while
computation is in progress, so the computation should be short and simple, and must not
attempt to update any other mappings of this map.
Reentrant Lock to rescue
Reentrant Lock to rescue
Effectively dead lock
Effectively dead lock
The child task can’t execute because all carriers are pinned by other virtual threads
private static final ConcurrentMap<String, String> cache = new ConcurrentHashMap<>();
private static String refresh(String key) {
try (var scope = new StructuredTaskScope.ShutdownOnSuccess<String>()) {
scope.fork(() -> UUID.randomUUID().toString());
scope.join();
return scope.result();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws Exception {
final int cpus = Runtime.getRuntime().availableProcessors();
final List<Future> futureList = new ArrayList<>();
t ( E t Vi t lTh dP T kE t ()) {
It needs to allocate a lot of ReentrantLock instances, and those are 40 bytes per lock
Application halt
Application halt
Synchronized
Synchronized
Runtime.getRuntime().availableProcessors() - 1
Park in scheduler
Park in scheduler
The child task can’t execute because all carriers are pinned by other virtual threads
java -Djdk.virtualThreadScheduler.parallelism=N
java -Djdk.virtualThreadScheduler.parallelism=N-1
JVMTI
JVMTI
JVMTI
JVMTI
java -XX:-DoJVMTIVirtualThreadTransitions
Summary
Summary
Move to simpler blocking/synchronous code
Migrate tasks to Virtual threads not Platform threads to Virtual threads
Use Semaphores or similar to limit concurrency
Try to not cache expensive objects in Thread Locals
Avoid pinning
Avoid reusing
Avoid pooling
Everything for you
Everything for you
Thanks
Thanks
Here comes the Loom - Ya!vaConf.pdf
Here comes the Loom - Ya!vaConf.pdf

More Related Content

Similar to Here comes the Loom - Ya!vaConf.pdf

Multithreading 101
Multithreading 101Multithreading 101
Multithreading 101Tim Penhey
 
Demystifying the Go Scheduler
Demystifying the Go SchedulerDemystifying the Go Scheduler
Demystifying the Go Schedulermatthewrdale
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShareyayao
 
Pune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCDPune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCDPrashant Rane
 
Looming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfLooming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfjexp
 
Multithreading and concurrency in android
Multithreading and concurrency in androidMultithreading and concurrency in android
Multithreading and concurrency in androidRakesh Jha
 
New hope is comming? Project Loom.pdf
New hope is comming? Project Loom.pdfNew hope is comming? Project Loom.pdf
New hope is comming? Project Loom.pdfKrystian Zybała
 
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the CoreNSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the CoreNoSuchCon
 
Hs java open_party
Hs java open_partyHs java open_party
Hs java open_partyOpen Party
 
Linux kernel-rootkit-dev - Wonokaerun
Linux kernel-rootkit-dev - WonokaerunLinux kernel-rootkit-dev - Wonokaerun
Linux kernel-rootkit-dev - Wonokaerunidsecconf
 
Introto netthreads-090906214344-phpapp01
Introto netthreads-090906214344-phpapp01Introto netthreads-090906214344-phpapp01
Introto netthreads-090906214344-phpapp01Aravindharamanan S
 
Shopzilla On Concurrency
Shopzilla On ConcurrencyShopzilla On Concurrency
Shopzilla On ConcurrencyWill Gage
 
A Practical Event Driven Model
A Practical Event Driven ModelA Practical Event Driven Model
A Practical Event Driven ModelXi Wu
 

Similar to Here comes the Loom - Ya!vaConf.pdf (20)

concurrency
concurrencyconcurrency
concurrency
 
Multithreading 101
Multithreading 101Multithreading 101
Multithreading 101
 
Demystifying the Go Scheduler
Demystifying the Go SchedulerDemystifying the Go Scheduler
Demystifying the Go Scheduler
 
Multi-Threading
Multi-ThreadingMulti-Threading
Multi-Threading
 
MultiThreading in Python
MultiThreading in PythonMultiThreading in Python
MultiThreading in Python
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare
 
Internet Programming with Java
Internet Programming with JavaInternet Programming with Java
Internet Programming with Java
 
Java
JavaJava
Java
 
Pune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCDPune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCD
 
Threading.pptx
Threading.pptxThreading.pptx
Threading.pptx
 
Looming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfLooming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdf
 
Multithreading and concurrency in android
Multithreading and concurrency in androidMultithreading and concurrency in android
Multithreading and concurrency in android
 
Attack on the Core
Attack on the CoreAttack on the Core
Attack on the Core
 
New hope is comming? Project Loom.pdf
New hope is comming? Project Loom.pdfNew hope is comming? Project Loom.pdf
New hope is comming? Project Loom.pdf
 
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the CoreNSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
 
Hs java open_party
Hs java open_partyHs java open_party
Hs java open_party
 
Linux kernel-rootkit-dev - Wonokaerun
Linux kernel-rootkit-dev - WonokaerunLinux kernel-rootkit-dev - Wonokaerun
Linux kernel-rootkit-dev - Wonokaerun
 
Introto netthreads-090906214344-phpapp01
Introto netthreads-090906214344-phpapp01Introto netthreads-090906214344-phpapp01
Introto netthreads-090906214344-phpapp01
 
Shopzilla On Concurrency
Shopzilla On ConcurrencyShopzilla On Concurrency
Shopzilla On Concurrency
 
A Practical Event Driven Model
A Practical Event Driven ModelA Practical Event Driven Model
A Practical Event Driven Model
 

Recently uploaded

Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)Suman Mia
 
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSRajkumarAkumalla
 
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...RajaP95
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).pptssuser5c9d4b1
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Christo Ananth
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...
(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...
(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...ranjana rawat
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSSIVASHANKAR N
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxpurnimasatapathy1234
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130Suhani Kapoor
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Dr.Costas Sachpazis
 

Recently uploaded (20)

Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
 
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
 
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCRCall Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...
(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...
(TARA) Talegaon Dabhade Call Girls Just Call 7001035870 [ Cash on Delivery ] ...
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptx
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 

Here comes the Loom - Ya!vaConf.pdf