Ngân hàng câu hỏi của chương

Câu hỏi: PRN222 - Chương 2: Lập trình bất đồng bộ và song song

23 câu trắc nghiệm kèm lời giải của môn Advanced Cross-Platform Application Programming With .NET - Lập trình ứng dụng đa nền tảng nâng cao với .NET, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/23 câuCòn 3
1Asynchronous programming improves applications by:4 lựa chọnTrung bình67% trả lời đúng
AAutomatically turning them into multi-threaded
BImproving performance for I/O-bound operations
CNever blocking a thread
DAlways running faster than synchronous code
Lời giải
Tính chất không đồng bộ trong lập trình giúp cải thiện ứng dụng bằng cách cải thiện hiệu suất cho các hoạt động I/O. Điều này có nghĩa là các ứng dụng có thể thực hiện các tác vụ I/O như đọc hoặc ghi file, gửi hoặc nhận dữ liệu mạng mà không phải chờ đợi kết quả. Điều này giúp ứng dụng không bị chậm lại và có thể xử lý nhiều tác vụ cùng một lúc. Tính chất không đồng bộ cũng giúp giảm thiểu việc sử dụng các tài nguyên hệ thống như CPU và bộ nhớ, từ đó cải thiện hiệu suất tổng thể của ứng dụng.
Mở trang câu hỏi này →
2Which extension method is used to enable PLINQ on a data source?4 lựa chọnDễ86% trả lời đúng
AAsQueryable()
BAsEnumerable()
CAsParallel()
DParallelQuery()
Lời giải
Để có thể sử dụng PLINQ (Parallel Language Integrated Query) trên một nguồn dữ liệu, bạn cần sử dụng phương thức mở rộng AsParallel(). Phương thức này cho phép thực hiện truy vấn song song trên dữ liệu, giúp tăng hiệu suất và tốc độ xử lý. AsParallel() thường được sử dụng trong các trường hợp cần xử lý dữ liệu lớn và phức tạp. Ví dụ, bạn có thể sử dụng nó để thực hiện các phép tính toán toán học trên một tập dữ liệu lớn, hoặc để thực hiện các truy vấn phức tạp trên một cơ sở dữ liệu lớn.
Mở trang câu hỏi này →
AIt always increases electricity consumption
BIt saves time and reduces costs
CIt restricts the use of multiple processors
DIt prevents the use of distributed resources
Lời giải
Tính toán song song (parallel computing) so với tính toán tuần tự (serial computing) có một số ưu điểm quan trọng. Một trong những lợi thế chính của tính toán song song là nó có thể xử lý nhiều nhiệm vụ cùng một lúc, nhờ đó tiết kiệm thời gian và giảm chi phí. Điều này đặc biệt hữu ích trong các ứng dụng đòi hỏi xử lý dữ liệu lớn, chẳng hạn như mô hình hóa khí hậu, phân tích dữ liệu lớn và các ứng dụng khoa học tính toán khác. Tính toán song song cũng cho phép tận dụng được sức mạnh của nhiều bộ xử lý, điều này có thể dẫn đến tốc độ xử lý nhanh hơn và hiệu suất cao hơn. Tuy nhiên, cần lưu ý rằng tính toán song song cũng có thể tiêu thụ nhiều điện năng hơn, nhưng lợi ích về thời gian và chi phí tiết kiệm có thể vượt trội.
Mở trang câu hỏi này →
4What is the primary advantage of asynchronous programming?4 lựa chọnDễ100% trả lời đúng
AIncreased CPU usage.
BImproved responsiveness and reduced blocking.
CSimplified debugging.
DReduced memory consumption.
Lời giải
Asynchronous lập trình là một kỹ thuật cho phép thực hiện nhiều tác vụ đồng thời mà không cần chờ đợi kết quả của từng tác vụ. Điều này giúp cải thiện phản hồi và giảm thiểu tình trạng bị chặn (blocking). Khi sử dụng lập trình đồng bộ, chương trình sẽ bị dừng lại chờ đợi kết quả của từng tác vụ, dẫn đến giảm hiệu suất và phản hồi chậm. Ngược lại, lập trình bất đồng bộ cho phép chương trình tiếp tục thực hiện các tác vụ khác trong khi chờ đợi kết quả, giúp cải thiện hiệu suất và phản hồi nhanh chóng. Điều này đặc biệt quan trọng trong các ứng dụng cần xử lý nhiều dữ liệu hoặc yêu cầu phản hồi nhanh chóng, chẳng hạn như các ứng dụng trò chơi, ứng dụng di động và các ứng dụng web phức tạp.
Mở trang câu hỏi này →
5In PLINQ, which method converts a LINQ query into a parallel query?4 lựa chọnDễ80% trả lời đúng
AToParallel()
BParallelize()
CAsParallel()
DRunParallel()
Lời giải
Trong PLINQ, phương thức nào chuyển đổi một truy vấn LINQ thành một truy vấn song song?
Mở trang câu hỏi này →
6What is the purpose of the Task.WhenAll() method?4 lựa chọnDễ100% trả lời đúng
ATo execute a single task.
BTo wait for all provided tasks to complete.
CTo cancel a task.
DTo create a new thread.
Lời giải
Mục đích của phương thức Task.WhenAll() là chờ đợi tất cả các nhiệm vụ được cung cấp để hoàn thành. Khi sử dụng phương thức này, bạn có thể chờ đợi cho đến khi tất cả các nhiệm vụ được thực hiện xong trước khi tiếp tục thực hiện các hành động tiếp theo. Điều này giúp đảm bảo rằng các nhiệm vụ được thực hiện đồng thời đều đã hoàn thành trước khi tiếp tục.
Mở trang câu hỏi này →
7Which code will block the current thread?4 lựa chọnDễ83% trả lời đúng
Aawait task;
Btask.Wait();
Ctask.ContinueWith(...)
Dawait Task.WhenAll(tasks);
Lời giải

Để trả lời câu hỏi này, chúng ta cần hiểu về cách sử dụng các phương thức chờ đợi (wait) trong lập trình đa luồng. Trong lập trình đa luồng, các phương thức chờ đợi được sử dụng để ngăn chặn luồng hiện tại (thread) thực hiện các tác vụ khác cho đến khi một tác vụ cụ thể được hoàn thành. Có hai phương thức chờ đợi được sử dụng trong câu hỏi này: await task; và task.Wait();. await task; là một phương thức chờ đợi non-bloc (non-blocking), nó cho phép luồng hiện tại thực hiện các tác vụ khác trong khi chờ đợi tác vụ được chờ đợi được hoàn thành. Điều này có nghĩa là nếu có nhiều tác vụ được chờ đợi, luồng hiện tại sẽ không bị chặn. task.Wait(); là một phương thức chờ đợi bloc (blocking), nó sẽ ngăn chặn luồng hiện tại thực hiện các tác vụ khác cho đến khi tác vụ được chờ đợi được hoàn thành. Điều này có nghĩa là nếu có nhiều tác vụ được chờ đợi, luồng hiện tại sẽ bị chặn. task.ContinueWith(...) và await Task.WhenAll(tasks); không phải là phương thức chờ đợi, mà là các phương thức được sử dụng để thực hiện các tác vụ khác khi một tác vụ được chờ đợi được hoàn thành hoặc khi tất cả các tác vụ được chờ đợi được hoàn thành. Tóm lại, để trả lời câu hỏi này, chúng ta cần hiểu về cách sử dụng các phương thức chờ đợi non-bloc và bloc trong lập trình đa luồng.

Mở trang câu hỏi này →
8What is the Parallel.ForEach method used for?4 lựa chọnDễ86% trả lời đúng
AIterating over a collection in parallel.
BAsynchronous network operations.
CManaging system resources.
DEncrypting data.
Lời giải
Métodu Parallel.ForEach được sử dụng để lặp qua một tập hợp dữ liệu song song. Điều này có nghĩa là nó sẽ thực hiện các tác vụ lặp lại đồng thời trên nhiều luồng, giúp tăng tốc độ thực hiện và hiệu suất của chương trình. Điều này đặc biệt hữu ích khi bạn cần xử lý một lượng lớn dữ liệu và muốn tận dụng tối đa khả năng của máy tính. Ví dụ, nếu bạn cần đọc dữ liệu từ một tập tin lớn, bạn có thể sử dụng Parallel.ForEach để đọc dữ liệu đồng thời từ nhiều phần của tập tin, giúp giảm thời gian thực hiện.
Mở trang câu hỏi này →
ASorting a large array.
BRendering a complex 3D scene.
CDownloading a file from the internet.
DPerforming a CPU-intensive calculation.
Lời giải
Một ví dụ về hoạt động I/O có thể được thực hiện bằng cách lập trình đồng bộ là tải một tệp từ internet. Hoạt động I/O là những hoạt động liên quan đến nhập/xuất dữ liệu từ các thiết bị ngoại vi như mạng internet, đĩa cứng, v.v. Các hoạt động này thường chậm hơn so với các hoạt động tính toán và có thể được thực hiện đồng thời với các hoạt động khác. Lập trình đồng bộ là một kỹ thuật lập trình cho phép các hoạt động I/O được thực hiện đồng thời với các hoạt động khác, giúp tăng hiệu suất và giảm thời gian chờ đợi. Ví dụ, khi tải một tệp từ internet, bạn có thể thực hiện các hoạt động khác trong khi chờ đợi tệp được tải xong.
Mở trang câu hỏi này →
10How many tasks does the following code create?4 lựa chọncó codeDễ86% trả lời đúng
Đề bài
for (int i = 0; i < 3; i++) {
  Task t = new Task(() => Console.WriteLine(i));
  t.Start();
}
A1
B2
C3
D6
Lời giải
Mã nguồn trên tạo ra 3 nhiệm vụ. Khi sử dụng vòng lặp for để tạo ra các nhiệm vụ, mỗi lần lặp sẽ tạo ra một nhiệm vụ mới. Trong trường hợp này, mã nguồn sẽ lặp 3 lần, tạo ra 3 nhiệm vụ. Tuy nhiên, cần lưu ý rằng mỗi nhiệm vụ sẽ thực hiện một hành động tương tự, đó là in ra giá trị của biến i. Do đó, mặc dù có 3 nhiệm vụ nhưng giá trị in ra sẽ chỉ là 0, 1 và 2 lần lượt trong 3 nhiệm vụ đầu tiên. Nhiệm vụ thứ 4 sẽ không được tạo ra vì điều kiện vòng lặp là i < 3.
Mở trang câu hỏi này →
11Which .NET namespace provides classes for task-based asynchronous programming?4 lựa chọnDễ100% trả lời đúng
ASystem.IO
BSystem.Net
CSystem.Threading.Tasks
DSystem.Collections.Generic
Lời giải
Trong lập trình .NET, việc sử dụng các kỹ thuật lập trình đồng bộ hóa (asynchronous programming) là rất quan trọng để tăng hiệu suất và giảm thiểu thời gian chờ đợi. Một trong những cách phổ biến để thực hiện điều này là sử dụng các lớp trong namespace System.Threading.Tasks. Namespace này cung cấp các lớp và phương thức để tạo và quản lý các tác vụ (task) đồng bộ hóa, giúp cho các chương trình .NET trở nên linh hoạt và hiệu quả hơn.
Mở trang câu hỏi này →
12Hyper-Threading technology was first introduced in which type of processors?4 lựa chọnTrung bình57% trả lời đúng
ACore i3
BXeon server processors
CPentium 4
DCore i7
Lời giải
Công nghệ Hyper-Threading được giới thiệu lần đầu tiên trong các loại vi xử lý Xeon server processors. Công nghệ này cho phép mỗi lõi xử lý có thể thực hiện nhiều luồng xử lý cùng một lúc, giúp tăng hiệu suất và khả năng đa nhiệm của hệ thống. Xeon server processors là loại vi xử lý được thiết kế cho các máy chủ và hệ thống server, và công nghệ Hyper-Threading được sử dụng để tăng cường hiệu suất và khả năng xử lý dữ liệu của chúng. Điều này giúp các hệ thống server có thể xử lý nhiều tác vụ cùng một lúc, tăng cường hiệu suất và giảm thời gian chờ đợi.
Mở trang câu hỏi này →
13What is the purpose of the await keyword in C#?4 lựa chọnDễ100% trả lời đúng
ATo define a constant.
BTo pause execution until an asynchronous operation completes.
CTo create a new thread.
DTo handle exceptions.
Lời giải
Từ khóa await trong C# được sử dụng để tạm dừng thực thi chương trình cho đến khi một hoạt động bất đồng bộ hoàn thành. Điều này giúp chương trình có thể tiếp tục thực thi các hoạt động khác trong khi chờ đợi kết quả của hoạt động bất đồng bộ. Khi sử dụng await, chương trình sẽ không bị đứng yên và chờ đợi kết quả của hoạt động bất đồng bộ, mà sẽ tiếp tục thực thi các hoạt động khác và khi kết quả của hoạt động bất đồng bộ sẵn sàng, chương trình sẽ tiếp tục thực thi từ điểm mà nó đã tạm dừng. Điều này giúp chương trình trở nên hiệu suất cao hơn và dễ dàng quản lý hơn.
Mở trang câu hỏi này →
14In C#, what is the primary role of the TaskScheduler class?4 lựa chọnDễ100% trả lời đúng
ATo create new threads directly
BTo handle queuing of tasks onto threads
CTo manage garbage collection of tasks
DTo provide thread synchronization
Lời giải
Trong C#, lớp TaskScheduler đóng vai trò chính là quản lý việc sắp xếp các tác vụ (task) vào các luồng (thread). Lớp này chịu trách nhiệm đảm bảo rằng các tác vụ được thực hiện một cách hiệu quả và an toàn. Khi bạn tạo một tác vụ mới, nó sẽ được thêm vào hàng đợi của TaskScheduler, và sau đó sẽ được thực hiện bởi một luồng thích hợp. Điều này giúp tránh được tình trạng xung đột giữa các tác vụ và đảm bảo rằng các tác vụ được thực hiện một cách đồng bộ. Ngoài ra, lớp TaskScheduler cũng cung cấp các phương thức để quản lý và điều khiển các tác vụ, chẳng hạn như hủy bỏ tác vụ, chờ đợi tác vụ hoàn thành, v.v.
Mở trang câu hỏi này →
15Which namespace does Task Parallel Library (TPL) belong to?4 lựa chọnDễ100% trả lời đúng
ASystem.Threading.Tasks
BSystem.Linq
CSystem.Collections
DSystem.IO
Lời giải
Task Parallel Library (TPL) là một thư viện trong .NET Framework cho phép thực hiện các tác vụ song song và đồng bộ. Để sử dụng TPL, chúng ta cần sử dụng không gian tên System.Threading.Tasks. Không gian tên này cung cấp các lớp và phương thức để tạo và quản lý các tác vụ song song, chẳng hạn như Task, Parallel, ParallelOptions, v.v. Ngoài ra, không gian tên này cũng cung cấp các phương thức để đồng bộ các tác vụ, chẳng hạn như Wait, Result, v.v. Vì vậy, không gian tên System.Threading.Tasks là không gian tên mà Task Parallel Library (TPL) thuộc về.
Mở trang câu hỏi này →
16What is the Parallel.For method used for?4 lựa chọnTrung bình67% trả lời đúng
AAsynchronous file operations.
BExecuting a loop in parallel.
CHandling network requests.
DCreating user interfaces.
Lời giải
Métodu Parallel.For được sử dụng để thực hiện một vòng lặp trong môi trường đa luồng. Nó cho phép bạn thực hiện một khối mã nhiều lần, đồng thời với nhau, trên nhiều luồng khác nhau. Điều này giúp tăng tốc độ thực hiện của chương trình, đặc biệt là khi xử lý dữ liệu lớn. Bạn có thể sử dụng Parallel.For để thực hiện các tác vụ như tính toán, sắp xếp dữ liệu, hoặc bất kỳ tác vụ nào khác có thể được thực hiện song song.
Mở trang câu hỏi này →
AThread.Sleep()
BTask.Run() + await
CPLINQ
DBackgroundWorker (obsolete)
Lời giải
Để viết một ứng dụng WPF mà không bị đóng băng giao diện khi fetch dữ liệu từ web, bạn cần sử dụng một kỹ thuật phù hợp. Có một số lựa chọn như sau: Thread.Sleep(), Task.Run() + await, PLINQ và BackgroundWorker (đã lỗi thời). Tuy nhiên, trong số các lựa chọn này, Task.Run() + await là lựa chọn tốt nhất. Bởi vì Task.Run() cho phép bạn chạy một tác vụ nền, trong khi await cho phép bạn chờ đợi kết quả của tác vụ đó mà không bị đóng băng giao diện. Điều này giúp ứng dụng của bạn vẫn hoạt động trơn tru và không bị chậm lại khi fetch dữ liệu từ web.
Mở trang câu hỏi này →
18Which architecture does a mono-processor system use?4 lựa chọnDễ86% trả lời đúng
AVon Neumann architecture
BHarvard architecture
CMIMD
DSIMD
Lời giải
Một hệ thống máy tính mono-processor sử dụng kiến trúc Von Neumann. Kiến trúc này được đặt theo tên của nhà toán học người Hungary John von Neumann. Trong kiến trúc Von Neumann, bộ nhớ chính và bộ xử lý nằm trên cùng một mạch, điều này cho phép dữ liệu được đọc từ bộ nhớ và thực hiện các phép toán trên dữ liệu đó. Điều này giúp giảm thiểu thời gian và tăng hiệu suất của hệ thống. Ngoài ra, kiến trúc Von Neumann cũng cho phép hệ thống thực hiện các phép toán logic và tính toán phức tạp. Nó là một trong những kiến trúc cơ bản của máy tính và được sử dụng rộng rãi trong nhiều loại hệ thống máy tính khác nhau.
Mở trang câu hỏi này →
AUses a single processor
BExecutes one instruction at a time
CInstructions are executed sequentially
DAll instructions run in parallel streams
Lời giải
Đáp án đúng: "All instructions run in parallel streams". Tính toán tuần tự nghĩa là chương trình chạy trên MỘT bộ xử lý, các lệnh được thực hiện lần lượt, mỗi thời điểm chỉ một lệnh - đúng như các phát biểu A, B và C. Vì vậy phát biểu "tất cả các lệnh chạy song song trên nhiều luồng" là điều KHÔNG đúng với tính toán tuần tự; đó chính là đặc trưng của tính toán song song, nơi bài toán được chia nhỏ và thực hiện đồng thời trên nhiều lõi hoặc nhiều bộ xử lý. Câu hỏi yêu cầu chọn phát biểu SAI nên đáp án là D.
Mở trang câu hỏi này →
AA system with multiple CPUs.
BA system with a single CPU.
CA system with multiple cores.
DA distributed system.
Lời giải
Đáp án đúng: "A system with a single CPU." Hệ thống đơn bộ xử lý (mono-processor, còn gọi uniprocessor) là hệ chỉ có MỘT CPU đảm nhiệm toàn bộ việc thực thi lệnh; tại một thời điểm nó chỉ chạy được một luồng lệnh, và cảm giác đa nhiệm có được là nhờ hệ điều hành luân phiên chia thời gian. Hệ nhiều CPU ("A system with multiple CPUs.") là multi-processor; hệ một CPU nhiều lõi ("A system with multiple cores.") đã có khả năng thực thi song song thật sự nên không còn là mono-processor theo nghĩa cổ điển; hệ phân tán ("A distributed system.") gồm nhiều máy độc lập nối mạng, thuộc phạm trù hoàn toàn khác.
Mở trang câu hỏi này →