Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. .NET (Core and Framework)
  4. PLINQ - WithDegreeOfParallelism

PLINQ - WithDegreeOfParallelism

Scheduled Pinned Locked Moved .NET (Core and Framework)
databasequestion
7 Posts 4 Posters 7 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    dataminers
    wrote on last edited by
    #1

    WithDegreeOfParallelism: Degree of parallelism is the maximum number of concurrently executing tasks that will be used to process the query. I don't quite understand what you mean by this sentence. --> "concurrently executing tasks" What exactly is meant by "TASK"? CPU or Kernel or something else??? What does "3" do in the code block below; AdventureWorks2017Context context = new AdventureWorks2017Context(); context.Products.AsParallel().WithDegreeOfParallelism(3).ForAll(p => { //ToDO }) Best Regards...

    L 1 Reply Last reply
    0
    • D dataminers

      WithDegreeOfParallelism: Degree of parallelism is the maximum number of concurrently executing tasks that will be used to process the query. I don't quite understand what you mean by this sentence. --> "concurrently executing tasks" What exactly is meant by "TASK"? CPU or Kernel or something else??? What does "3" do in the code block below; AdventureWorks2017Context context = new AdventureWorks2017Context(); context.Products.AsParallel().WithDegreeOfParallelism(3).ForAll(p => { //ToDO }) Best Regards...

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #2

      dataminers wrote:

      what you mean by this sentence. --> "concurrently executing tasks"

      The term tasks in that context is equivalent to threads in your previous question. LINQ will create multiple threads and share the problem between them.

      dataminers wrote:

      What does "3" do in the code block below;

      It's the value referred to in your first sentence.

      D 1 Reply Last reply
      0
      • L Lost User

        dataminers wrote:

        what you mean by this sentence. --> "concurrently executing tasks"

        The term tasks in that context is equivalent to threads in your previous question. LINQ will create multiple threads and share the problem between them.

        dataminers wrote:

        What does "3" do in the code block below;

        It's the value referred to in your first sentence.

        D Offline
        D Offline
        dataminers
        wrote on last edited by
        #3

        Dear Richard, thank you for your reply. I understand that based on your answer, the two code blocks below are the same;

        await Task.Run(() =>
        {
        CalculateSomething(5);
        });

        await Task.Run(() =>
        {
        CalculateSomething(8);
        });

        List myList = new() { 5, 8 };

        myList.AsParallel().WithDegreeOfParallelism(2).ForAll(x =>
        {
        CalculateSomething(x);
        });

        Both complete the process on two Threads. Note: CalculateSomething hypothetically this function takes a very long time Regards...

        L Richard DeemingR 2 Replies Last reply
        0
        • D dataminers

          Dear Richard, thank you for your reply. I understand that based on your answer, the two code blocks below are the same;

          await Task.Run(() =>
          {
          CalculateSomething(5);
          });

          await Task.Run(() =>
          {
          CalculateSomething(8);
          });

          List myList = new() { 5, 8 };

          myList.AsParallel().WithDegreeOfParallelism(2).ForAll(x =>
          {
          CalculateSomething(x);
          });

          Both complete the process on two Threads. Note: CalculateSomething hypothetically this function takes a very long time Regards...

          L Offline
          L Offline
          Lost User
          wrote on last edited by
          #4

          That certainly makes sense.

          D 1 Reply Last reply
          0
          • L Lost User

            That certainly makes sense.

            D Offline
            D Offline
            dataminers
            wrote on last edited by
            #5

            Sometimes people get confused when you read a lot. You know, not all information on the Internet is correct. That's why I'm investigating the issue. Please don't get me wrong. Multi-Thread: Running more than one Threads inside a Process. Parallel Programming: Running threads simultaneously on different cores in multi-core processors. So; .NET Core TPL (Task Parallel Library) is Multi-Thread programming, not a Parallel Programming. Isn't it?

            D 1 Reply Last reply
            0
            • D dataminers

              Sometimes people get confused when you read a lot. You know, not all information on the Internet is correct. That's why I'm investigating the issue. Please don't get me wrong. Multi-Thread: Running more than one Threads inside a Process. Parallel Programming: Running threads simultaneously on different cores in multi-core processors. So; .NET Core TPL (Task Parallel Library) is Multi-Thread programming, not a Parallel Programming. Isn't it?

              D Offline
              D Offline
              Dave Kreskowiak
              wrote on last edited by
              #6

              Your definitions are not correct. You can also have multiple physical CPUs with multiple cores each. Threads refers to "threads of execution". You can have multiple threads running on a single core, though the core will only execute code on one thread at a time, for a limited amount of time before switching to the next thread in the scheduler. You can have multiple cores running multiple threads at the same time. You can have more threads "running" than there are cores in the CPUs to run them. For example, open Task Manager and go to the Performance tab. See the "Threads" number? There's thousands of threads running in hundreds of processes, but you only have, say, 8 cores to run them all. Most threads are sitting idle, waiting for a core to execute them, or waiting for I/O to complete, or whatever else. Windows gives the illusion of running thousands of threads using "pre-emptive multitasking". This allows a thread to execute on a core for a small amount of time before being stopped and the core switches to the next thread in the scheduler. A Task is NOT a thread. In some respects, it looks like a thread of execution, but it's really an abstraction, or wrapper around a block of work to do. Tasks are scheduled to run on a pool of threads (a ThreadPool). You can have more tasks running than there are threads in the pool. Tasks can sit idle waiting for an available thread to a task, or part of a task. A single task can be executed by multiple threads. Thread0 can execute a task for a limited time, then the task is idled, waiting for execution to be resumed by either another thread, or the same thread that was executing it before. Thread1 can pick up where Thread0 left off, or Thread0 can come back around and pick up where it left off. Think of it as layers, with CPUs at the bottom of the stack, cores on top of that, then threads on top of cores, and Tasks on top of threads. Each layer you go higher in the stack can have more items in it than the layer below.

              |+++++++ Tasks +++++++|
              |++++ Threads ++++|
              |+++ Cores +++|
              |+ CPUs + |

              Parallel programming is a technique, or library, that makes it easier to write code to execute on multiple threads, or cores, to accomplish work. The Task Parallel Library is an IMPLEMENTATION of parallel programming. The TPL makes it easier to write code that uses multiple threads to accomplish work.

              Asking questions is a skill[](</x-turndown)

              1 Reply Last reply
              0
              • D dataminers

                Dear Richard, thank you for your reply. I understand that based on your answer, the two code blocks below are the same;

                await Task.Run(() =>
                {
                CalculateSomething(5);
                });

                await Task.Run(() =>
                {
                CalculateSomething(8);
                });

                List myList = new() { 5, 8 };

                myList.AsParallel().WithDegreeOfParallelism(2).ForAll(x =>
                {
                CalculateSomething(x);
                });

                Both complete the process on two Threads. Note: CalculateSomething hypothetically this function takes a very long time Regards...

                Richard DeemingR Offline
                Richard DeemingR Offline
                Richard Deeming
                wrote on last edited by
                #7

                dataminers wrote:

                the two code blocks below are the same

                No they're not. The first one starts a new task to execute CalculateSomething(5), and then suspends the current thread until that task completes. It then starts another task to execute CalculateSomething(8). The second one starts two tasks to execute CalculateSomething(5) and CalculateSomething(8), and then freezes the current thread until both have completed. If you time both approaches, the AsParallel code will be roughly twice as fast as the two await Task.Run(...) calls. The closest equivalent using Task.Run would be:

                // Start both tasks in parallel:
                Task t1 = Task.Run(() => CalculateSomething(5));
                Task t2 = Task.Run(() => CalculateSomething(8));

                // Wait for both tasks to complete:
                await Task.WhenAll(t1, t2);
                // Or: await t1; await t2;


                "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • World
                • Users
                • Groups