javascript

git

java

python

git-remote

reactjs

c++

github

django

c#

.net

.net-framework-version

operators

git-fetch

typescript

user-experience

chmod

css

content-type

variables

ios-dispatch_get_global_queue和dispatch_queue_create有什么区别?

我正在编写一个中等复杂的iOS程序,它的一些较长的操作(解析,与网络的连接等)需要有多个线程。 但是,我对dispatch_get_global_queuedispatch_queue_create之间的区别感到困惑。

我应该使用哪一个,您能否简单解释一下一般的区别? 谢谢。

trans by 2020-08-06T17:59:06Z

多线程-如何在Clojure中启动线程?

我已经读了很多关于Clojure在并发性方面的知识,但是我读过的所有教程都没有真正解释如何创建线程。 您只是做(.start(Thread。func)),还是我错过了另一种方法?

trans by 2020-08-05T07:41:07Z

等待多个期货吗?

我想一次运行相同类型的任务(工作线程),但一次不能超过一定数量的任务。 任务完成时,其结果是新任务的输入,然后可以启动该新任务。

有没有什么好方法可以在C ++ 11中使用异步/未来范例来实现这一目标?

乍一看,它看起来很简单,您只需使用以下命令即可生成多个任务:

std::future<T> result = std::async(...);

然后,运行result.get()以获取任务的异步结果。

但是,这里的问题是,将来的对象必须存储在某种队列中,并逐个等待。 但是,可以一次又一次地遍历将来的对象,以检查它们是否已经准备好,但是由于不必要的CPU负载,这是不希望的。

是否有可能以某种方式等待给定集合中的任何将来并获得结果?

到目前为止,我唯一想到的选择是没有任何异步/未来的老式方法。 具体来说,产生多个工作线程,并在每个线程的末尾将其结果推送到互斥保护的队列中,该队列通过条件变量通知等待线程,该队列已更新了更多结果。

还有其他更好的异步/未来解决方案吗?

trans by 2020-08-05T05:26:33Z

java-Thread.stop()-已弃用

为什么在Java中不推荐使用Thread.stop()? 在他们的网站上,我看到以下内容:

为什么不建议使用Thread.stop()

因为它本质上是不安全的。 停止线程会使它解锁它已锁定的所有监视器。 (当Thread.stop()异常在堆栈中传播时,监视器将被解锁。)如果先前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可以以不一致状态查看这些对象。 据说这些物体已损坏。 当线程对损坏的对象进行操作时,可能会导致任意行为。 此行为可能是微妙的,难以检测,或者可能是明显的。 与其他未检查的异常不同,ThreadDeath静默杀死线程; 因此,用户没有警告其程序可能已损坏。 在实际损坏发生后的任何时间,甚至未来数小时或数天,腐败都会显现出来。

我不明白“监视者”的含义。 无论如何,我的问题是,如果不应调用Thread.stop(),那么应该如何停止Java线程呢?

trans by 2020-08-04T21:32:25Z

进程-线程和进程与多线程和多核/多处理器:如何映射?

我很困惑,但是以下线索消除了我的疑虑:

多处理,多线程,超线程,多核

但是它从硬件角度解决了查询。 我想知道这些硬件功能如何映射到软件?

显而易见的是,MultiProcessor(= Mutlicpu)和MultiCore之间没有区别,除了在多核中,所有cpus都驻留在一个芯片(管芯)上,而在多处理器中,所有cpus都在自己的芯片上并连接在一起。

因此,mutlicore /多处理器系统能够在“同一时间”执行多个进程(firefox,mediaplayer,googletalk)(与上下文在单个处理器系统上切换这些进程不同)是吗?

如果正确的话。 到目前为止,我还很清楚。 但是,当多线程出现时,就会引起混乱。

  1. 多线程“用于”并行处理。 对?

  2. cpu中的多线程涉及哪些元素? 图? 我要利用两个独立任务的并行处理能力,对CPU的要求应该是什么?

  3. 当人们说线程的上下文切换时。 我真的不明白。 因为如果它的上下文切换线程,那么它就不能并行处理。 线程必须“同时严格执行”。 对?

    我的多线程概念是:考虑具有单个cpu的系统。 当进程上下文切换为Firefox时。 (假设)firefox的每个选项卡都是一个线程,并且所有线程都严格同时执行。 不像一个线程执行了一段时间,然后另一个线程再次占用了上下文切换时间。

  4. 如果我在无法处理线程的处理器上运行多线程软件会怎样? 我的意思是CPU如何处理此类软件?

  5. 如果到目前为止一切都很好,那么现在的问题是,有几多? 我猜它必须受硬件限制吗? 如果硬件只能支持2个线程,并且我在进程中启动了10个线程。 cpu将如何处理? 优点缺点? 从软件工程的角度来看,在开发将被各种系统的用户使用的软件时,那么我将如何决定选择多线程呢? 如果是这样,有多少个线程?

trans by 2020-08-03T01:16:55Z

多线程-C ++编译器如何确保不同但相邻的内存位置可以安全地在不同线程上使用?

可以说我有一个结构:

struct Foo {
  char a;  // read and written to by thread 1 only
  char b;  // read and written to by thread 2 only
};

现在,据我了解,当两个线程在两个不同的内存位置上运行时,C ++标准可以保证上述安全性。

我会认为,由于char a和char b属于同一缓存行,因此编译器必须进行额外的同步。

这里到底发生了什么?

trans by 2020-08-02T21:45:59Z

多线程-线程最佳实践

我从事的许多项目的线程实现都比较差,而我却是个笨拙的人,必须追踪这些问题。 有没有公认的最佳方式来处理线程。 我的代码始终在等待永远不会触发的事件。

我有点像设计模式之类的东西。

trans by 2020-08-02T20:19:24Z

c ++-Java中同步的对应功能是什么?

Java中的synchronized可保证线程安全。那C++呢?

谢谢!

trans by 2020-08-02T18:03:57Z

SQL Server-临时表是线程安全的吗?

我正在使用SQL Server 2000,并且它的许多存储过程都广泛使用临时表。 数据库有很多流量,我担心创建和删除临时表的线程安全性。

假设我有一个存储过程,该存储过程创建了一些临时表,它甚至可能将临时表连接到其他临时表,等等。还可以说两个用户同时执行该存储过程。

  • 一个用户可以运行sp并创建一个名为#temp的临时表,而另一个用户是否可以运行相同的sp但由于数据库中已经存在一个名为#temp的表而被停止,这可能吗?

  • 如果同一用户在同一连接上两次执行相同的存储过程,该怎么办?

  • 是否还有其他可能导致两个用户查询相互干扰的怪异场景?

trans by 2020-08-01T22:10:31Z

如何在多线程应用程序中使用SQLite?

我正在开发一个使用SQLite作为数据库的应用程序,并且在理解如何在多个线程中使用它方面遇到了一些麻烦(不幸的是,其他所有Stack Overflow问题都没有真正帮助过我)。

我的用例:数据库有一个表,我们称它为“ A”,它具有不同的行组(基于它们的列之一)。 我有应用程序的“主线程”,该主线程从表A中读取内容。此外,我偶尔决定更新一组特定的行。 为此,我想产生一个新线程,删除组中的所有行,然后重新插入它们(这是在我的应用程序上下文中唯一的方法)。 这可能同时发生在不同的组上,所以我可能有2个以上的线程试图更新数据库。

我从每个线程使用不同的交易,即 在每个线程的更新周期开始时,我都有一个开始。 实际上,每个线程实际上所做的是调用“ BEGIN”,从数据库中删除所有需要“更新”的行,然后使用新值再次插入它们(这是在我的上下文中必须这样做的方式)。 应用)。

现在,我试图了解如何实现此目标。 我已经尝试阅读(SQLite网站Stack Overflow上的其他答案),但是我没有找到所有答案。 这是我想知道的一些事情:

  1. 我需要调用“ open”并从每个线程创建一个新的sqlite结构吗?
  2. 我是否需要为此添加任何特殊代码,或者是否足以生成不同的线程,更新行,这很好(因为我正在使用不同的事务)?
  3. 我看到了一些关于不同锁类型的讨论,以及从调用某些API可能会收到“ SQLite繁忙”的事实,但是说实话,当我需要考虑所有这些因素时,我没有看到任何可以完全解释的参考。 我需要吗?

如果有人可以回答问题/将我指向一个好的资源,我将非常感谢。

更新1:从到目前为止的所有内容看,您似乎无法拥有两个将要写入数据库文件的线程。

请参见:[http://www.sqlite.org/lockingv3.html。]在3.0节中:RESERVED锁意味着该进程正在计划在将来某个时候写入数据库文件,但目前仅在读取该文件。 从文件中。 尽管多个SHARED锁可以与一个RESERVED锁共存,但一次只能激活一个RESERVED锁。

这是否意味着我也最好只产生一个线程来每次更新一组行? 即,有某种轮询器线程决定我需要更新一些行,然后创建一个新线程来执行此操作,但一次最多只能执行一次? 由于看起来像我创建的任何其他线程一样,它只会得到SQLITE_BUSY,直到第一个线程完成为止。

我理解得正确吗?

顺便说一句,感谢您到目前为止的回答,他们提供了很多帮助。

trans by 2020-08-01T18:51:38Z

多线程-如何在Java 5中使用ExecutorService实现任务优先级?

我正在实现一种线程池机制,在该机制中我想执行具有不同优先级的任务。 我希望有一个很好的机制,通过该机制,我可以向服务提交高优先级的任务,并将其安排在其他任务之前。 任务的优先级是任务本身的内在属性(无论我将其表示为PriorityBlockingQueue还是ThreadPoolExecutor对我来说都不重要)。

现在,从表面上看,我可以使用PriorityBlockingQueue作为我的ThreadPoolExecutor中的任务队列,但是该队列包含Runnable对象,这些对象可能是我提交给它的Runnable任务,也可能不是。 此外,如果我提交了Callable任务,则尚不清楚如何映射。

有没有办法做到这一点? 我真的不希望自己为此付出代价,因为我更有可能以这种方式弄错它。

(顺便说一句,是的,我知道在这样的情况下,低优先级工作可能会挨饿。对于可以合理保证公平的解决方案,加分(?!))

trans by 2020-08-01T17:59:55Z

可以从工作线程调用NoticationManager.notify()吗?

我的问题更多是关于什么是好的实践,而不是可能的:

  • 从辅助线程调用NoticationManager.notify()是件好事吗?
  • 系统是否仍在UI线程中执行它?

我总是要谨记,有关UI的内容应在UI线程中执行,其余部分应在工作线程中执行,如Android关于流程和线程的文档所建议的那样:

此外,Andoid UI工具包也不是线程安全的。 所以,你必须 不能通过辅助线程来操作您的UI,您必须做所有 从UI线程对用户界面进行操作。 因此, 仅仅是Android单线程模型的两个规则:

  • 不要阻塞UI线程
  • 不要从UI线程外部访问Android UI工具包

但是,我对Android文档本身给出的一个示例感到惊讶(关于在Notifications中显示进度),其中正在进行的通知进度是直接从worker线程更新的:

mNotifyManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle("Picture Download")
    .setContentText("Download in progress")
    .setSmallIcon(R.drawable.ic_notification);
// Start a lengthy operation in a background thread
new Thread(
    new Runnable() {
        @Override
        public void run() {
            int incr;
            // Do the "lengthy" operation 20 times
            for (incr = 0; incr <= 100; incr+=5) {
                    // Sets the progress indicator to a max value, the
                    // current completion percentage, and "determinate"
                    // state
                    mBuilder.setProgress(100, incr, false);
                    // Displays the progress bar for the first time.
                    mNotifyManager.notify(0, mBuilder.build());
                        // Sleeps the thread, simulating an operation
                        // that takes time
                        try {
                            // Sleep for 5 seconds
                            Thread.sleep(5*1000);
                        } catch (InterruptedException e) {
                            Log.d(TAG, "sleep failure");
                        }
            }
            // When the loop is finished, updates the notification
            mBuilder.setContentText("Download complete")
            // Removes the progress bar
                    .setProgress(0,0,false);
            mNotifyManager.notify(ID, mBuilder.build());
        }
    }
// Starts the thread by calling the run() method in its Runnable
).start();

这就是为什么我想知道是否实际上有必要在主线程上运行它,或者系统是否要照顾它。

谢谢你的帮助!

trans by 2020-08-01T15:43:00Z

C ++-标准的原子布尔值和原子标记之间的区别

我不了解2992280211821121167616变量,但了解该标准提供的29922802118211676676(怪异的权利!)。 然而,有一件事引起了我的注意:标准提供了两种看似相同的原子类型,以下列出:

  1. std::atomic bool type类型

  2. std::atomic bool type type

还以2992280211821167667616的示例为例-

std :: atomic_flag是原子布尔类型。 与std :: atomic的所有专业不同,它保证是无锁的。 与std :: atomic不同,std :: atomic_flag不提供加载或存储操作。

我不明白。 是否不能保证29922802118211676676是无锁的? 那不是原子的还是什么?

那么两者之间有什么区别,什么时候应该使用?

trans by 2020-08-01T14:19:47Z

c#-为什么锁定要更改的对象是一种不好的做法?

为什么在下面的代码中使用锁是一种不好的做法,基于此SO问题的答案,我假设这是一种不好的做法

private void DoSomethingUseLess()
{
    List<IProduct> otherProductList = new List<IProduct>();
    Parallel.ForEach(myOriginalProductList, product =>
        {
           //Some code here removed for brevity
           //Some more code here :)
            lock (otherProductList)
            {
                otherProductList.Add((IProduct)product.Clone());
            }
        });
}

那里的答案提到这是不好的作法,但他们没有说为什么

注意:请忽略代码的有用性,这仅出于示例目的,我知道它根本没有用

trans by 2020-08-01T09:55:07Z

c#-使用'AsParallel()'/'Parallel.ForEach()'准则吗?

寻找有关利用AsParallel()Parallel.ForEach()加快速度的建议。

请参阅下面的方法(在本示例中为简化/严格化)。

它采用类似“ US,FR,APAC”的列表,其中“ APAC”是其他50个“ US,FR,JP,IT,GB”等国家的别名。 该方法应采用“ US,FR,APAC”,并将其转换为“ US”,“ FR”以及“ APAC”中所有国家/地区的列表。

private IEnumerable<string> Countries (string[] countriesAndAliases)
{
    var countries = new List<string>();

    foreach (var countryOrAlias in countriesAndAliases)
    {
        if (IsCountryNotAlias(countryOrAlias))
        {
            countries.Add(countryOrAlias);
        }
        else 
        {
            foreach (var aliasCountry in AliasCountryLists[countryOrAlias]) 
            {
                countries.Add(aliasCountry);
            }
        }
    }

    return countries.Distinct();
}

使并行化与将其更改为以下内容一样简单吗? 使用AsParallel()会比这有更多细微差别吗? 我应该使用Parallel.ForEach()而不是foreach吗? 并行处理foreach循环时,应使用什么经验法则?

private IEnumerable<string> Countries (string[] countriesAndAliases)
{
    var countries = new List<string>();

    foreach (var countryOrAlias in countriesAndAliases.AsParallel())
    {
        if (IsCountryNotAlias(countryOrAlias))
        {
            countries.Add(countryOrAlias);
        }
        else 
        {
            foreach (var aliasCountry in AliasCountryLists[countryOrAlias].AsParallel()) 
            {
                countries.Add(aliasCountry);
            }
        }
    }

    return countries.Distinct();
}
trans by 2020-07-31T11:59:21Z

多线程-C ++并行化库:OpenMP与线程构建块

我将对自定义图形引擎进行改造,以便利用多核CPU。 更确切地说,我正在寻找一个库来并行化循环。

在我看来,OpenMP和英特尔的线程构建模块都非常适合这项工作。 此外,Visual Studio的C ++编译器和大多数其他流行的编译器都支持这两种方法。 而且这两个库似乎都非常简单易用。

那么,我应该选择哪一个呢? 有没有人尝试过这两个库,可以给我一些使用这两个库的利弊? 另外,您最终选择了使用什么?

谢谢,

阿德里安

trans by 2020-07-31T01:44:17Z

传递多个参数到std :: thread

我问的是C ++ 11标准中的<thread>库。

假设您有一个类似的功能:

void func1(int a, int b, ObjA c, ObjB d){
    //blahblah implementation
}

int main(int argc, char* argv[]){
    std::thread(func1, /*what do do here??*/);
}

您如何将所有这些参数传递给线程? 我尝试列出类似的参数:

std::thread(func1, a,b,c,d);

但它抱怨没有这样的构造函数。 解决此问题的一种方法是定义一个将参数打包的结构,但是还有另一种方法可以做到这一点吗?

trans by 2020-07-30T23:54:31Z

一定数量的时间后停止线程

我希望在一定时间后终止一些线程。 这些线程将运行一个无限的while循环,在这段时间内,它们可能会停顿一段随机的大量时间。 线程的持续时间不能超过duration变量设置的时间。在持续时间设置的长度之后,如何使线程停止。

def main():
    t1 = threading.Thread(target=thread1, args=1)
    t2 = threading.Thread(target=thread2, args=2)

    time.sleep(duration)
    #the threads must be terminated after this sleep
trans by 2020-07-30T22:47:31Z

c#-“正在创建模型时不能使用上下文” ASP.NET标识异常

当我们调用AccountApiController.Register()方法时,为什么会发生这种情况?

  • 什么试图使用上下文?
  • 什么试图创建上下文?
  • 我们如何避免这种情况?
  • 我们该如何调试呢?

“ Message”:“发生错误。”,

“ ExceptionMessage”:“在模型处于 正在创建。 如果使用上下文,则可能引发此异常 在OnModelCreating方法内部还是在相同的上下文实例中 由多个线程同时访问。 注意实例成员 DbContext和相关类的集合不能保证是线程 安全。”,

“ ExceptionType”:“ System.InvalidOperationException”,

“堆栈跟踪”:”

在System.Web.Http.ApiController.d__1.MoveNext()

---从之前引发异常的位置开始的堆栈跟踪

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在System.Runtime.CompilerServices.TaskAwaiter .HandleNonSuccessAndDebuggerNotification(任务>任务)

在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()“

trans by 2020-07-30T19:59:10Z

C ++-C ++ 11中的双重检查锁单例

以下单例实现数据竞赛是否免费?

static std::atomic<Tp *> m_instance;
...

static Tp &
instance()
{
    if (!m_instance.load(std::memory_order_relaxed))
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        if (!m_instance.load(std::memory_order_acquire))
        {
            Tp * i = new Tp;
            m_instance.store(i, std::memory_order_release);    
        }    
    }

    return * m_instance.load(std::memory_order_relaxed);
}

负载操作的std::memory_model_acquire是否多余? 通过将它们切换到std::memory_order_relaxed,是否可以进一步放松装载和存储操作? 在那种情况下,std::mutex的获取/释放语义是否足以保证其正确性,还是还需要std::atomic_thread_fence(std::memory_order_release)以确保对构造函数的内存的写操作在宽松存储之前发生? 但是,使用围栏是否等于拥有memory_order_release的商店?

编辑:感谢约翰的回答,我想出了以下应实现数据竞赛的实现。 即使内部负载可能根本不是原子的,我还是决定保留松弛的负载,因为它不会影响性能。 与始终具有获取内存顺序的外部负载相比,thread_local机械提高了访问大约一个数量级的实例的性能。

static Tp &
instance()
{
    static thread_local Tp *instance;

    if (!instance && 
        !(instance = m_instance.load(std::memory_order_acquire)))
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        if (!(instance = m_instance.load(std::memory_order_relaxed)))
        {
            instance = new Tp; 
            m_instance.store(instance, std::memory_order_release);    
        }    
    }
    return *instance;
}
trans by 2020-07-30T19:46:16Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共31页