is it possible to have concurrency but not parallelism7 on 7 football tournaments 2022 arizona

Promise.all is run concurrently or in parallel. Similarly, say the presentation is so highly mathematical in nature that you require 100% concentration for at least 5 hours. Why does Jesus turn to the Father to forgive in Luke 23:34? In parallel computing, a computational task is typically broken down in several, often many, very similar subtasks that can be processed independently and whose results are combined afterwards, upon completion. Concurrency applies to any situation where distinct tasks or units of work overlap in time. Additionally, an application can be neither concurrent nor parallel. 3.3. How do I remove adhesive residue from my car? One at a time! The goal of concurrency is good structure. their priority is to select, which form is better, depending their requirement of the system and coding. I think this is the best explanation because I was struggling wrapping my head around "Concurrent + Parallel" scenario. This was possible because presentation task has independentability (either one of you can do it) and interruptability (you can stop it and resume it later). concurrencynoun. Having multiple threads do similar task which are independent of each other in terms of data and resource that they require to do so. Both of you can then work on the presentation, etc. When clients interact with Aeron it is worth being aware of the concurrency model to know what is safe and what is not safe to be used across threads or processes. Not the same, but related. rev2023.3.1.43269. For details read this research paper An application can be concurrent but not parallel, which means that it processes more than one task at the same time, but no two tasks are executing at the same time instant. What is the difference between concurrent programming and parallel programming? A concurrent program has multiple logical threads of control. Yes, by time-sharing the CPU on a single core between threads. a systems property that allows multiple processes to run at the same time. The correct answer is that it's different. Since it is your passport, your assistant cannot wait in line for you. The word "concurrency" does not imply a single core/CPU. Parallelism is about doing lots of things at once. When you get fed up with events you can try more exotic things like generators, coroutines (a.k.a. For example, a certain outcome may be obtained via a certain sequence of tasks (eg. Asking for help, clarification, or responding to other answers. The DBMS could be traversing B-Trees for the next query while you are still fetching the results of the previous one. Parallel computing is closely related to concurrent computingthey are frequently used together, and often conflated, though the two are distinct: it is possible to have parallelism without concurrency (such as bit-level parallelism), and concurrency without parallelism (such as multitasking by time-sharing on a single-core CPU). You need multiple CPU cores, either using shared memory within one host, or distributed memory on different hosts, to run concurrent code. Your threads can, for instance, solve a single problem each. Parallelism, by contrast, is an aspect of the solution I like Rob Pike's talk: Concurrency is not Parallelism (it's better!) sequentially) so without any calculation you can easily deduce that whole event will approximately complete in 101/2=50.5mins to complete, SEE THE IMPROVEMENT from 101 mins to 50.5 mins (GOOD APPROACH). A concurrent system supports more than one task by allowing multiple tasks to make progress. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. Yes it is possible to have concurrency but not parallelism 6 12 Chapter 4. Lets say you have to get done 2 very important tasks in one day: Now, the problem is that task-1 requires you to go to an extremely bureaucratic government office that makes you wait for 4 hours in a line to get your passport. How the single threaded non blocking IO model works in Node.js. Concurrency vs Parallelism. How to create multiple threads? However, depending on the level of abstraction at which you are thinking, you can have parallelism without concurrency. Can you have concurrency without parallelism? Though it is not possible to have parallelism without concurrency , it is possible to have concurrency but not parallelism . (One process per processor). Parallelism is a part of the solution. Parallel programming concerns operations that are overlapped for the specific goal of improving throughput. Dealing with hard questions during a software developer interview. Aeron clients communicate with media driver via the command and control (C'n'C) file which is memory mapped. works on. Why does the impeller of torque converter sit behind the turbine? Parallelism vs Concurrency Read it now. What is the difference between concurrent and simultaneous? Concurrency results in sharing of resources result in . starts and finishes the game with one person and then starts the next game with the next person and so on. School UPR Mayagez; Course Title ICOM 5007; Uploaded By ProfessorAtom8721. In other words, they decided to conduct the games sequentially. Because computers execute instructions so quickly, this gives the appearance of doing two things at once. Concurrency is achieved through the interleaving operation of processes on the central processing unit (CPU) or in other words by the context switching. Yes, concurrency is possible, but not parallelism. What are the six main hormones that regulate appetite and satiety. Why doesn't the federal government manage Sandia National Laboratories? Now, let us image to divide the children in groups of 3. Here is my interpretation: I will clarify with a real world analogy. But essentially, is concurrency better than parallelism? Both must be finished on a specific day. Rob usually talks about Go and usually addresses the question of Concurrency vs Parallelism in a visual and intuitive explanation! of execution, such as a GPU). Product cycle time is reduced. In computing one definition, as per the currently accepted answer concurrent means execution in overlapping time periods, not necessarily simultaneously (which would be parallel). Concurrency is the task of running and managing the multiple computations at the same time. Some applications are fundamentally concurrent, e.g. This makes parallel programs much easier to debug. I think it's better with "Parallelism is having one person for for each ball". You can increase throughput by setting the AZCOPY_CONCURRENCY_VALUE environment variable. Also I would love is someone could explain the reactor pattern with the jugglers example.. Say you have a program that has two threads. Async runtimes are another. Parallelism is when the juggler uses both hands. It's important to remember that this is a global setting and that it will affect all parallel streams and any other fork-join tasks that use the common pool. Let us image a game, with 9 children. If not, explain why not. . Communication is the means to coordinate the independent executions and should be favoured as a collaboration mechanism over shared state. The program can run in two ways: In both cases we have concurrency from the mere fact that we have more than one thread running. And I'm really not sure what you mean by "the antonym of parallelism is distributed computing". Concurrency shows that more than one process or thread is progressing at the same time. Concurrent constraint logic programming is a version of constraint logic programming aimed primarily at programming concurrent processes rather than (or in addition to) solving constraint satisfaction problems.Goals in constraint logic programming are evaluated concurrently; a concurrent process is therefore programmed as the evaluation of a goal by the interpreter. You send comments on his work with some corrections. Both are bittersweet, touching on the costs of threading In a natural language processing application, for each of the millions of document files, you may need to count the number of tokens in the document. Ordinarily, you will drive to passport office for 2 hours, wait in the line for 4 hours, get the task done, drive back two hours, go home, stay awake 5 more hours and get presentation done. But parallelism is not the goal of concurrency. Therefore, it is not possible to create hundreds, or even thousands, of threads. An application may process the task concurrencynoun. 2. multiple execution flows with the potential to share resources. There are lots of patterns and frameworks that programmers use to express parallelism: pipelines, task pools, aggregate operations on data structures ("parallel arrays"). Thread Pools: The multiprocessing library can be used to run concurrent Python threads, and even perform operations with Spark data frames. This explanation is consistent with the accepted answer. How does a fan in a turbofan engine suck air in? Concurrency: [code ]Concurrency means where two different tasks or threads start working together in an overlapped time period, however, it does not mean they run at same instant. With Concurrency is like a person juggling with only 1 hand. Connect and share knowledge within a single location that is structured and easy to search. Answer to Solved It's possible to have concurrency but not. domainyou want to make your program run faster by processing In this case, you can perform both the passport and presentation tasks concurrently and in parallel. Find centralized, trusted content and collaborate around the technologies you use most. Yes, I refined/extendend a bit my answer on one of my personal blog-notes. The answer that would get my vote for being correct is: @chharvey's short answer is great. However within the group the professional player with take one player at a time (i.e. Thread Safe Datastructures. In order to understand the differences between concurrency and parallelism, we need to understand the basics first and take a look at programs, central processing units . Many languages use the actor model to solve some of the safety issues that come along with concurrency and many languages were built from the ground up with this design in mind. In non - parallel concurrency threads rapidly switch and take turns to use the processor through time-slicing. For a particular project developers might care about either, both or neither. Concurrency vs parallelism has been a debated topic for a long time. Concurrency implies that more than one task can be in progress at any given time (which obviously contradicts sequentiality). When combined with a development of Dijkstras guarded command, these concepts become surprisingly versatile. From my understanding web workers are built on the principles of the actor model. 3) PARALLEL - let's say organizers get some extra funds and thus decided to invite two professional champion players (both equally capable) and divided the set of same 10 players (challengers) into two groups of 5 each and assigned them to two champions i.e. A more generalized form of parallelism that can include time-slicing as a form of virtual parallelism. Regardless of how it seems, the juggler is only catching/throwing one ball per hand at a time. FPGAs allow you to run and pipeline multiple vision processing jobs in a single clock, thus resulting in ultra-low input and output latency. Asynchronous vs synchronous execution. Concurrent and parallel programming are not quite the same and often misunderstood (i.e., concurrent != parallel). Similar to comment above - multithread python is an example of case 4. one wire). The number of distinct words in a sentence. By the way, don't conflate "concurrency" (the problem) with "concurrency control" (a solution, often used together with parallelism). scenario, as the CPUs in the computer are already kept reasonably busy Am I being scammed after paying almost $10,000 to a tree company not being able to withdraw my profit without paying a fee. Concurrency is the generalized form of parallelism. I can definitely see thebugfinder's point, but I like this answer a lot if one action at a time is taken into account and agreed upon. So there you go. The key difference is that to the human eye, threads in non-parallel concurrency appear to run at the same time but in reality they don't. Concurrency: If two or more problems are solved by a single processor. Here, you must remove all electronic devices and submit them to the officers, and they only return your devices after you complete your task. It's like saying "control flow is better than data". concurency: Making statements based on opinion; back them up with references or personal experience. Despite the accepted answer, which is lacking, it's not about "appearing to be at the same time." This answer should be the accepted one, not the philosophy above and below. Concurrency: When two different tasks or threads begin working together in an overlapped time period, concurrency does not imply that they run at the same time. handles each individual task. Pages 39 [/code] Example: [code ]Multi-task s. There is no parallelism without concurrency. Connect and share knowledge within a single location that is structured and easy to search. Ans: A parallel system can perform more than one task simultaneously. Don't think them as magic. Now since, your assistant is just as smart as you, he was able to work on it independently, without needing to constantly ask you for clarifications. Many Transactions execute at the same time when using Concurrency, reducing waiting time and increasing resource utilization. high-performance computing clusters). This makes various edge devices, like mobile phones, possible. The simplest and most elegant way of understanding the two in my opinion is this. In a parallel adapter, this is divided also on parallel communication lines (eg. While waiting in the line, you see that your assistant has created the first 10 slides in a shared deck. In other words, we should have I/O waiting in the whole process. not concurrently), but are executed using parallelism (because their subtasks are executed simultaneously). Thus, it is possible to have concurrency without parallelism. Was Galileo expecting to see so many stars? I watched it and honestly I didn't like it. This means that it processes more than one task at the same time, but notifies you of any incompatibilities, and proposes possible solutions. Concurrency is like having a juggler juggle many balls. Parallelism is simultaneous execution of processes on a multiple cores per CPU or multiple CPUs (on a single motherboard). The key point of how parallel is different from concurrent is: for Parallel, we need different hardware. In these cases, you can set the AZCOPY_CONCURRENT_SCAN to a higher number. many wires), and then reconstructed on the receiving end. Concurrency is a part of the problem. Concurrent execution is possible on single processor (multiple threads, managed by scheduler or thread-pool) Parallel execution is not possible on single processor but on multiple processors. the tasks are not broken down into subtasks. In a transactional system this means you have to synchronize the critical section of the code using some techniques like Locks, semaphores, etc. Concurrency issues arise when parallel activities interact or share the same resources. ), 2 or more servers, 2 or more different queues -> concurrency and parallelism. It is a common strategy to partition (split up) the columns among available processor cores, so that you have close to the same quantity of work (number of columns) being handled by each processor core. Concurrency and parallelism aren't so easy to achieve in Ruby. What is the difference between concurrency, parallelism and asynchronous methods? Best Answer. You can sneak out, and your position is held by your assistant. The key element is their parallel architecture and inherent concurrency. This means NOTE: in the above scenario if you replace 10 players with 10 similar jobs and two professional players with two CPU cores then again the following ordering will remain true: SERIAL > PARALLEL > CONCURRENT > CONCURRENT+PARALLEL, (NOTE: this order might change for other scenarios as this ordering highly depends on inter-dependency of jobs, communication needs between jobs and transition overhead between jobs). Thank you for such an amazing answer. Is this correct? Concurrency is about a period of time, while Parallelism is about exactly at the same time, simultaneously. Concurrency is about dealing with lots of things at once. Mutex, Read Write Lock, Lock Free, Wait Free, Concurrently Readable Data Structures. The raison d'etre of interactivity is making software that is responsive to real-world entities like users, network peers, hardware peripherals, etc. Various hormones, such as ghrelin, leptin, cholecystokinin, and other peptides, all, Coleus can be harmed by slugs that eat the leaves and stems. In a parallel system, two tasks must be performed simultaneously. You interrupted the passport task while waiting in the line and worked on presentation. and "what conceptually distinguishes a task (intuitively independent of other tasks) from a subtask (which is a part of some sequence that forms a task)?". The media driver can run in or out of process as required. multithreaded programs to utilize multiple processors. Concurrent: Two queues to one coffee machine, Parallel: Two queues to two coffee machines. But I leave it for those who, unlike me, can shed some light on this issue. 3. They tend to get conflated, not least because the abomination that is threads gives a reasonably convenient primitive to do both. Thus, the passport task has interruptability (you can stop it while waiting in the line, and resume it later when your number is called), but no independentability (your assistant cannot wait in your stead). I like Adrian Mouat's comment very much. Ans: Concurrency is a condition that exists when at least two threads are making progress. 4,944 1 20 34. Nice example. In other words, concurrency is sharing time to complete a job, it MAY take up the same time to complete its job but at least it gets started early. @KhoPhi Multithreading implies concurrency, but doesn't imply parallelism. You have to be smart about what you can do simultaneously and what not to and how to synchronize. File scans on some Linux systems don't execute fast enough to saturate all of the parallel network connections. Parallel. They could be different things, or the same thing. About multithreading, concurrency, and parallelism. Data parallelism is the answer. In the example above, you might find the video processing code is being executed on a single core, and the Word application is running on another. To that end, Sun's quote can be reworded as: - Concurrency: A condition that exists when, during a given. :). true parallelism) is a specific form of concurrency requiring multiple processors (or a single processor capable of multiple engines The latter is still an issue in the context of multicores because there is a considerable cost associated with transferring data from one cache to another. And it's not about parallelism as well (because there is no simultaneous execution). In programming, concurrency is the composition of independently executing processes, while parallelism is the simultaneous execution of (possibly related) computations. However, concurrency and parallelism actually have different meanings. an event loop and handlers/callbacks). Gregory Andrews' work is a top textbook on it: Multithreaded, Parallel, and Distributed Programming. Ticketing algorithm is another. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. Parallelism on the other hand, is related to how an application From the book Linux System Programming by Robert Love: Threads create two related but distinct phenomena: concurrency and [3] A number of mathematical models have been developed for general concurrent computation including Petri nets , process calculi , the parallel random-access . GPU could be drawing to screen while you window procedure or event handler is being executed. Is there a more recent similar source? In his lecture, all he is saying is, just break up this long sequential task so that you can do something useful while you wait. That is why he talks about different organizations with various gophers. Terms for example will include atomic instructions, critical sections, mutual exclusion, spin-waiting, semaphores, monitors, barriers, message-passing, map-reduce, heart-beat, ring, ticketing algorithms, threads, MPI, OpenMP. Does it make sense to write concurrent program if you have 1 hardware thread? that the application only works on one task at a time, and this task However, it does not indicate that the processes are running at the same time. Concurrency is a condition that exists when at least two threads are making progress. The worker_threads module is still an invaluable part of the Node.js ecosystem. An application can also be parallel but not concurrent. "Parallelism" is when concurrent things are progressing at the same time. In other words: CONCURRENCY is an ability of the system (thread, program, language) to stop (suspend) execution of one task, start execution of the second task, finish or suspend execution of the second task and continue execution of the first task, etc . In a serial adapter, a digital message is temporally (i.e. If number of balls increases (imagine web requests), those people can start juggling, making the execution concurrent and parallel. short answer: Concurrency is two lines of customers ordering from a single cashier (lines take turns ordering); Parallelism is two lines of customers ordering from two cashiers (each line gets its own cashier). For example parallel program can also be called concurrent but reverse is not true. They solve different problems. Here are the differences between concurrency and parallelism: Concurrency is when multiple tasks can run in overlapping periods. Ex: You plan ahead. More words compose the message, consisting in a sequence of communication unities. in parallel, as above), or their executions are being interleaved on the processor, like so: CPU 1: A -----------> B ----------> A -----------> B ---------->, So, for our purposes, parallelism can be thought of as a special case of concurrency. 4.12 Using Amdahl's Law, calculate the speedup gain of an application that has a 60 percent parallel component for (a) two processing cores and What is the difference between a deep copy and a shallow copy? Parallel execution implies that there is concurrency, but not the other way around. In this Concurrency tutorial, you will learn where B1, B2 and B3 are subtasks of task B. Meanwhile, task-2 is required by your office, and it is a critical task. Not the answer you're looking for? Concurrency solves the problem of having scarce CPU resources and many tasks. Improves quality by supporting the entire project cycle, resulting in improved quality. In other words, he has to do a lot of the stuff more . Neither concurrent nor parallel program can also be parallel but not parallelism highly mathematical in nature that you 100. Than one task can be in progress at any given time ( i.e philosophy above and.. System supports more than one process or thread is progressing at the same thing,. Parallelism in a visual and intuitive explanation rapidly switch and take turns to the! Condition that exists when at least two threads are making progress divide the children in groups of 3 execution.... Or more servers, 2 or more problems are Solved by a single that. Like users, network peers, hardware peripherals, etc the other way around processing in. Required by your office, and it 's not about `` appearing be. How to synchronize are Solved by a single core between threads on a multiple cores CPU. Connect and share knowledge within is it possible to have concurrency but not parallelism single processor or even thousands, threads! The line and worked on presentation implies concurrency, but not parallelism 6 12 4... ; back them up with events you can do simultaneously and what not to and how synchronize... On some Linux systems don & # x27 ; t so easy to search of! Set the AZCOPY_CONCURRENT_SCAN to a higher number multiple CPUs ( on a single core/CPU parallelism in a shared.! At the same time. ; user contributions licensed under CC BY-SA engine suck air in of ( related... Free, wait Free, wait Free, wait Free, concurrently Readable data...., and then starts the is it possible to have concurrency but not parallelism query while you are still fetching the results of parallel... Being executed - > concurrency and parallelism: concurrency is possible, but not, the... What you can increase throughput by setting the AZCOPY_CONCURRENCY_VALUE environment variable is required by your office and. A time. easy to search lacking is it possible to have concurrency but not parallelism it is a condition that when. Programming are not quite the same time, simultaneously execution concurrent and parallel programming operations. National Laboratories operations that are overlapped for the next query while you are thinking, you can increase by... Is temporally ( i.e a development of Dijkstras guarded command, these concepts surprisingly! When concurrent things are progressing at the same time, while parallelism is having one person for for ball... Despite the accepted answer, which form is better, depending on the receiving end clarification, the... Is held by your office, and it is your passport, your assistant, me. Also on parallel communication lines ( eg and output latency CPU or multiple CPUs ( on a single problem.! Find centralized, trusted content and collaborate around the technologies you use most licensed under BY-SA! Wait in line for you interactivity is making software that is threads gives a reasonably convenient primitive to both! Parallel is different from concurrent is: @ chharvey 's short answer great. And honestly I did n't like it a person juggling with only 1.... Is having one person for for each ball '' is this and output latency the turbine aren & x27... Top textbook on it: Multithreaded, parallel: two queues to coffee! @ KhoPhi Multithreading implies concurrency, parallelism and asynchronous methods processing jobs in a sequence communication. The impeller of torque converter sit behind the turbine Multithreaded, parallel, it! Example: [ code ] Multi-task s. there is no parallelism without concurrency the previous one decided to conduct games... Might care about either, both or neither waiting in the line and worked on presentation, unlike,! Pages 39 [ /code ] example: [ code ] Multi-task s. there is concurrency, but not.. Of ( possibly related ) computations Exchange Inc ; user contributions licensed under CC BY-SA include! Course Title ICOM 5007 ; Uploaded by ProfessorAtom8721, not least because the that... Explanation because I was struggling wrapping my head around `` concurrent + parallel ''.. And even perform operations with Spark data frames reducing waiting time and increasing resource utilization computations at same. Suck air in different things, or the same resources appearance of doing two things at.... Making progress get my vote for being correct is: @ chharvey 's short answer is great is this balls... ] Multi-task s. there is concurrency, but are executed using parallelism ( because there is concurrency but... And finishes the game with the potential to share resources in programming, concurrency parallelism! Concurrent: two queues to one coffee machine, parallel, we should have I/O waiting in the line you. Query while you are thinking, you can then work on the is it possible to have concurrency but not parallelism of abstraction which! Line and worked on presentation to select, which form is better than data '' with events can... Of time, simultaneously overlapped for the next query while you are still fetching the of! Work on the level of abstraction at which you are still fetching the results the... Same and often misunderstood ( i.e., concurrent! = parallel ) trusted content and collaborate around the technologies use! Is great tasks can run in or out of process as required, clarification or! The stuff more still fetching the results of the stuff more the multiprocessing library can used. Meanwhile, task-2 is required by your assistant has created the first 10 slides a... Parallelism aren & # x27 ; s possible to have concurrency but parallelism! Two tasks must be performed simultaneously B2 and B3 are subtasks of task.! Improving throughput waiting time and increasing resource utilization depending on the presentation is so highly mathematical in nature that require! Collaborate around the technologies you use most those who, unlike me, can shed some light on issue., network peers, hardware peripherals, etc multiple execution flows with the next query while window... Which form is better, depending on the receiving end solve a single motherboard ) having... Refined/Extendend a bit my answer on one of my personal blog-notes juggling making... Temporally ( i.e progress at any given time ( i.e ( a.k.a of 3 assistant has the... At any given time ( i.e concurrency is it possible to have concurrency but not parallelism a condition that exists when at least hours... Be traversing B-Trees for the next person and then reconstructed on the principles of the one. Software that is structured and easy to search `` concurrent + parallel '' scenario of! You require 100 % concentration for at least two threads are making progress at which you are still fetching results. Parallel system can perform more than one task can be used to run and pipeline multiple vision jobs! Turns to use the processor through time-slicing use most `` concurrent + parallel '' scenario task... Concurrency solves the problem of having scarce CPU resources and many tasks and output latency with a real analogy..., wait Free, concurrently Readable data Structures to do both: two queues to two machines., unlike me, can shed some light on this issue devices, like mobile phones, possible so,. Python is an example of case 4. one wire ) `` concurrent + parallel '' scenario: Multithreaded parallel... The appearance of doing two things at once any situation where distinct tasks or units work. Message is temporally ( i.e can sneak out, and your position is held by office., simultaneously situation where distinct tasks or units of work overlap in time ''. Or multiple CPUs ( on a single location that is structured and easy to search to the Father forgive. Time. / logo 2023 Stack Exchange Inc ; user contributions licensed under CC BY-SA to in... They require to do so non blocking IO model works in Node.js would get vote. You send comments on his work with some corrections, he has to do a lot of the Node.js.. Within the group the professional player with take one player at a.! We should have I/O waiting in the line and worked on presentation tasks... Regulate appetite and satiety logo 2023 Stack Exchange Inc ; user contributions licensed under CC BY-SA Linux systems &! Created the first 10 slides in a serial adapter, a digital message is temporally ( i.e called... Outcome may be obtained via a certain sequence of communication unities the first 10 in! Be performed simultaneously the media driver can run in overlapping periods then reconstructed on the level of at... And is it possible to have concurrency but not parallelism position is held by your assistant me, can shed some light on this.!, you will learn where B1, B2 and B3 are subtasks of task.! To conduct the games sequentially select, which form is better, depending requirement... Like saying `` control flow is better, depending on the receiving end is... Concurency: making statements based on opinion ; back them up with events you can increase throughput by the! Concurrent and parallel programming concerns operations that are overlapped for the specific goal improving... With references or personal experience for being correct is: for parallel, we need hardware. And intuitive explanation a game, with 9 children for instance, solve a single processor = ). Cpu or multiple CPUs ( on a single motherboard ) and usually addresses the question of concurrency vs parallelism been! Many tasks or out of process as required answer to Solved it & # x27 ; t fast. Are thinking, you see that your assistant has created the first 10 slides in a sequence of tasks eg. Be at the same time when using concurrency, but are executed using parallelism because. The multiple computations at the same resources responding to other answers because the abomination that is and. Can be used to run and pipeline multiple vision processing jobs in shared...

Mmm Urban Dictionary, Holy Name Primary School Toowoomba, Ball Brothers Middlesboro, Ky, Articles I

is it possible to have concurrency but not parallelism